![]() |
|
|
|
|
#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; |
|
#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 для нескольких клавиш
|