|
#1
|
|||
|
|||
Хук клавы
Доброе время суток!!!! Пишу прогу которая сидит в памяти и реагирует на нажатие сочетаний клавиш.....все вроде бы нормально....но вот перехват клавиш решил сделать через DLL, вот процедура обработки клавиш:
Код:
function KeyMsgProc(Code: integer; wParam: word; lParam: LongInt): LongInt; stdcall; var kn: array[0..50] of Char; begin if (Code = HC_ACTION) and (((lParam shr 16) and KF_UP) = KF_UP) then begin GetKeyNameText(lParam, kn, SizeOf(kn)); MessageBox(0, PChar('"' + IntToStr(wParam) + '" ' + StrPas(kn)), PChar(''), MB_OK); end; Result:= CallNextHookEx(KHook, Code, wParam, lParam); end; APPLICATION.TERMINATOR |
#2
|
||||
|
||||
Вот пример проги без окна, при нажатии ALT+1 - пикает ALT+А12 выход.
Код:
Program Proga; Uses Windows, Messages; Var W: TWndClassEx; H: HWND; Mesg : TMsg; Procedure CloseProgram; begin UnRegisterHotkey(H, 1); UnRegisterHotkey(H, 2); PostQuitMessage(0); Exit; end; Procedure SaveHWNDL2(p: Wparam); begin if p = 1 Then Windows.Beep(8192, 50); if p = 2 Then CloseProgram; end; Function WindowProc(H:HWND; Msg: Integer; Wp:Wparam; Lp:Lparam):Lresult; stdcall; Begin Result:= 0; case Msg of WM_DESTROY: CloseProgram; WM_HOTKEY: SaveHWNDL2(Wp); Else Result:= DefWindowProc(H, Msg, Wp, Lp); end; end; begin W.cbSize:= SizeOf(W); W.lpfnWndProc:= @WindowProc; W.lpszClassName:= 'prog'; RegisterClassEx(W); H:=CreateWindowEx(0,'prog','prog',0,0,0,0,0,0,0,0,nil); RegisterHotkey(H, 1, MOD_ALT, Ord('1')); RegisterHotkey(H, 2, MOD_ALT, VK_F12); Windows.Beep(8192, 50); While GetMessage(Mesg,0,0,0) do begin TranslateMessage(Mesg); DispatchMessage(Mesg); end; end. |
#3
|
||||
|
||||
сочетание клавиш это последовательное наступление событий down для нескольких клавиш
Пишу программы за еду. __________________ |