Текущий архив: 2006.05.14;
Скачать: CL | DM;
Вниз
Как отловить нажатие клавиши в системе Найти похожие ветки
← →
spyrytus © (2006-02-21 00:32) [0]Здравствуйте.
У меня следующий вопрос :
Как отловить нажатие определенной клавиши или их комбинации в случае если фокус находится на другой форме, или когда моя прога уже спряталась в трей ?
Заранее благодарен.
← →
kaZaNoVa © (2006-02-21 00:53) [1]хуком (можно и без длл)
что-то вроде такого:const
WH_KEYBOARD_LL = 13;
WH_MOUSE_LL = 14;
LLKHF_EXTENDED = KF_EXTENDED shr 8;
LLKHF_INJECTED = $00000010;
LLKHF_ALTDOWN = KF_ALTDOWN shr 8;
LLKHF_UP = KF_UP shr 8;
LLMHF_INJECTED = $00000001;
{ Structure used by WH_KEYBOARD_LL }
type
tagKBDLLHOOKSTRUCT = packed record
vkCode : DWord;
scanCode : DWord;
flags : DWord;
time : DWord;
dwExtraInfo : PDWord;
end;
TKBDLLHOOKSTRUCT = tagKBDLLHOOKSTRUCT;
PKBDLLHOOKSTRUCT = ^TKBDLLHOOKSTRUCT;
{ Structure used by WH_MOUSE_LL }
tagMSLLHOOKSTRUCT = packed record
pt : TPoint;
mouseData : DWord;
flags : DWord;
time : DWord;
dwExtraInfo : PDWord;
end;
tMSLLHOOKSTRUCT = tagMSLLHOOKSTRUCT;
PMSLLHOOKSTRUCT = ^TMSLLHOOKSTRUCT;
Var hhk: HHOOK;
function LowLevelKeyboardProc(nCode :Longint; awParam: WParam; alParam:
LParam): DWord; stdcall;
var
fEatKeystroke: Boolean;
p: PKBDLLHOOKSTRUCT;
buf: array [0..255] of Char;
sc: UINT;
begin
fEatKeystroke := False;
if (nCode = HC_ACTION) then
case (awParam) of
WM_KEYDOWN, WM_SYSKEYDOWN,
WM_KEYUP, WM_SYSKEYUP:
begin
p := PKBDLLHOOKSTRUCT(alParam);
fEatKeystroke :=
((p.vkCode = VK_TAB) and (p.flags and LLKHF_ALTDOWN <> 0)) or
((p.vkCode = VK_ESCAPE) and ((p.flags and LLKHF_ALTDOWN) <> 0)) or
((p.vkCode = VK_ESCAPE) and ((GetKeyState(VK_CONTROL) and $8000)
<>0));
end;
end;
if fEatKeystroke then
Result := 1
else
Result := CallNextHookEx(0, nCode, awParam, alParam);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
hhk:= SetWindowsHookEx(WH_KEYBOARD_LL,@LowLevelKeyboardProc, Hinstance, 0);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
UnHookWindowsHookEx(hhk);
end;
end.
← →
kaZaNoVa © (2006-02-21 00:55) [2]хотя для определенной 1-ной клавиши можно обойтись и
GetKeyState()
в цикле ...
← →
Crash Coredump © (2006-02-21 13:10) [3]RegisterHotkey
Страницы: 1 вся ветка
Текущий архив: 2006.05.14;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.034 c