Zuerst brauchst du das:
Delphi-Quellcode:
type
ULONG_PTR = ^DWORD;
PKBDLLHOOKSTRUCT = ^TKBDLLHOOKSTRUCT;
TKBDLLHOOKSTRUCT = packed record
vkCode : DWORD;
scanCode : DWORD;
flags : DWORD;
time : DWORD;
dwExtraInfo : ULONG_PTR;
end;
Umsetzung von
KBDLLHOOKSTRUCT
Das Gleiche gibt es für die Maus auch
MSLLHOOKSTRUCT
(aber nur für WM_MOUSE_LL ab NT4 s.u.)
und dann so
Delphi-Quellcode:
if
( wParam = WM_KEYDOWN )
then
begin
KHSp := PKBDLLHOOKSTRUCT( lParam );
KHSd := KHSp^;
if
not
(
( KHSd.vkCode = 160 ) and ( KHSd.scanCode = 42 ) or // Shift Left
( KHSd.vkCode = 162 ) and ( KHSd.scanCode = 29 ) or // Ctrl Left
( KHSd.vkCode = 161 ) and ( KHSd.scanCode = 54 ) or // Shift Right
( KHSd.vkCode = 163 ) and ( KHSd.scanCode = 29 ) // Ctrl Right
)
then
das geht dann, wenn Du den Hook so implementierst:
Delphi-Quellcode:
KeyboardHookHandle :=
SetWindowsHookEx(
WH_KEYBOARD_LL,
@KeyboardHookProc,
HInstance,
0 );
und das geht erst ab NT4.
Vor NT4 musst du WH_KEYBOARD nehmen und dann hast du anhand wParam z.B. VK_xxx abprüfen.
cu
Oliver
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)