Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.188.211.58] |
|
Сообщ.
#1
,
|
|
|
Как программным образом отслеживать нажатые клавиши на клавиатуре при ЛЮБОМ активном приложении?
|
Сообщ.
#2
,
|
|
|
Для этого существуют API функции типа RegisterHotKey и ей подобные
|
Сообщ.
#3
,
|
|
|
чтобы отслеживать нажатие клавиш во всех приложения, нужно сделать DLL с функцией Hook'a и вызывать эту функцию из проги.
Даже пример не жалко - по F12 выключает компьютер. У меня работает. (C) не мой - собрано из 2 примеров, не помню откуда. ================================= program testwindow; uses Windows, Messages; var WinClass: TWndClassA; Inst, hMainWindow: Integer; Msg: TMsg; P:Pointer; DLL:HMODULE; function key_hook(Code: integer; wParam: word; lParam: Longint): Longint; external 'Lib1.dll'; { Custom WindowProc function } function WindowProc(hWnd, uMsg, wParam, lParam: Integer): Integer; stdcall; begin Result := DefWindowProc(hWnd, uMsg, wParam, lParam); { Checks for messages } if uMsg = WM_DESTROY then Halt; end; begin Inst := hInstance; with WinClass do begin style := CS_CLASSDC or CS_PARENTDC; lpfnWndProc := @WindowProc; hInstance := Inst; hbrBackground := color_btnface + 1; lpszClassname := 'NewClass'; hCursor := LoadCursor(0, IDC_CROSS); end; { with } if (RegisterClass(WinClass)<>0)then begin hMainWindow := CreateWindowEx(WS_EX_WINDOWEDGE, 'NewClass', '', WS_SIZEBOX or WS_CAPTION or WS_SYSMENU, 363, 278, 305, 130, 0, 0, Inst, nil); ShowWindow(hMainWindow,SW_HIDE); UpdateWindow(hMainWindow); DLL:=LoadLibrary('ShutDown'); p:=@key_hook; while(GetMessage(Msg, hMainWindow, 0, 0)) do begin TranslateMessage(msg); DispatchMessage(msg); end; FreeLibrary(DLL); end; end. library ShutDown; uses WinTypes, WinProcs, Messages; var SaveExitProc : Pointer; HookHandle: hHook = 0; function key_hook(Code: integer; wParam: word; lParam: Longint): Longint; stdcall; begin if Code >= 0 then begin if(wParam = VK_F12)then ExitWindowsEx(EWX_SHUTDOWN,0); Result:=0; end else Result := CallNextHookEx(HookHandle,Code, wParam, lParam); end; procedure LocalExitProc; far; begin if HookHandle<>0 then begin UnhookWindowsHookEx(HookHandle); ExitProc := SaveExitProc; end; end; exports Key_hook; begin HookHandle := SetWindowsHookEx(wh_Keyboard, @Key_Hook, hInstance, 0); if HookHandle <> 0 then begin SaveExitProc := ExitProc; ExitProc := @LocalExitProc; end; end. |