Aloah zusammen. Ich habe auf Basis von Ollis Tutorial eine
DLL für einen globalen Tastatur-Hook zusammengeschustert, und das funktioniert leider nur "halb". Es geht, so lange ich nur meine Hostanwendung gestartet habe und nichts weiter mache. Verliert diese aber einmal den Fokus, ists vorbei. Selbst wenn ich der Anwendung den Fokus wieder gebe.
Ich stelle einfach mal den
DLL Code ein, er ist kurz genug. Da dies mein erster Einsatz von Hooks ist, bin ich da etwas unbeholfen. Dem
msdn nach schauen die Aufrufe für mich soweit okay aus, ich weiss nichtmal mehr wonach ich schauen müsste.
Delphi-Quellcode:
library Hooks;
uses
Windows, Messages, SysUtils;
var
Keyboard_HookHandle: HHOOK = 0;
function KbdHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
Result := CallNextHookEx(Keyboard_HookHandle, nCode, wParam, lParam);
case nCode < 0 of
True: Exit;
False:
begin
if wParam in [ord('a')..ord('z'), ord('A')..ord('Z'), ord('0')..ord('9')] then Beep;
end;
end;
end;
function InstallHooks: Boolean; stdcall;
var
keybh: boolean;
begin
keybh := false;
if Keyboard_HookHandle = 0 then
begin
Keyboard_HookHandle := SetWindowsHookEx(WH_KEYBOARD, @KbdHookProc, hInstance, 0);
keybh := Keyboard_HookHandle <> 0;
end;
Result := keybh;
end;
function UninstallHooks: Boolean; stdcall;
begin
Result := UnhookWindowsHookEx(Keyboard_HookHandle);
Keyboard_HookHandle := 0;
end;
procedure DLLMain(dwReason: DWord);
begin
end;
exports
InstallHooks,
UninstallHooks;
begin
end.
Die Hostanwendung ist einfach eine normale automatisch erzeugte Standard-Delphi-Start-Anwendung, bei der ich im OnFormCreate "InstallHooks", und im OnFormClose "UninstallHooks" aufrufe (statische Bindung). Warum verliere ich den Hook?
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)