Hab' mal ein bisschen herumgespielt - bei mir geht's mit WH_KEYBOARD auch nicht
... aaaaaber ...
mit WH_KEYBOARD_LL geht's
, und da braucht man noch nicht einmal eine
DLL für.
Delphi-Quellcode:
const
WH_KEYBOARD_LL = 13;
type
PKbDllHookStruct = ^TKbDllHookStruct;
TKbDllHookStruct = packed record
vkCode: Cardinal;
scanCode: Cardinal;
flags: Cardinal;
time: Cardinal;
end;
function LLKeyboardHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
if nCode = HC_ACTION then
with PKbDllHookStruct(lParam)^ do begin
// ... dein Code
end;
Result := CallNextHookEx(HookHandle, nCode, wParam, lParam);
end;
Die Hook-Prozedur hat denselben Aufbau (nCode, wParam, lParam), aber diesmal zeigt lParam auf eine TKbDllHookStruct-Struktur. Da kannst du mit
vkCode direkt den virtuellen Keycode auslesen.
flags hat in den Bits 0-7 denselben Inhalt wie lParam bei WM_KEYxxx-Meldungen in den Bits 24-31 (siehe
SDK-Doku).
Nachtrag: Für die, die damit etwas herumspielen möchten, habe ich ein kleines Beispielprojekt angehängt.