richtig, hab ich auhc gemerkt, als ich einen thread fand, der sich auf eine von hagen geschribeene hook-
dll bezog. hab die dann mehr oder weniger kopiert, und folgendes daraus gemacht:
Delphi-Quellcode:
library P_Hook;
uses
Windows,
Messages,
sysutils;
var hookhandle:cardinal=0;
key:integer=0;
keynew:boolean=false;
function KeyboardHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM):
LRESULT; stdcall;
begin
//es ist ebenfalls möglich die Bearbeitung an eine Bedingung zu knüpfen
//it's possible to call CallNextHookEx conditional only.
Result := CallNextHookEx(HookHandle, nCode, wParam, lParam);
key:=wparam;
keynew:=true;
end;
function getLastKey:integer;
begin
if keynew then result:=key
else result:=-1;
keynew:=false;
end;
function InstallHook: Boolean; stdcall;
begin
Result := False;
if HookHandle = 0 then begin
//Erstmal Hook installieren
//First install the hook
HookHandle := SetWindowsHookEx(WH_KEYBOARD, @KeyboardHookProc,
HInstance, 0);
Result := TRUE;
end;
end;
function UninstallHook: Boolean; stdcall;
begin
//Hook aus der Hookchain entfernen
//Uninstall hook from hook chain
Result := UnhookWindowsHookEx(HookHandle);
HookHandle := 0;
end;
exports
//Installations- und Deinstallationsroutine exportieren
//Export the installation and deinstallation routine
InstallHook,
UninstallHook,
getLastKey;
end.
alles in der mainformunit statisch gelinkt per "external 'sowieso'".
Wenn ich nun alles schön im formcreate initialisiere und getlastkey per timer aufrufe, geht es aber immernoch nur in der eigenen mainform....
muss ich irgendwie noch in meiner mainform loadlibrary machen und die Adresse an Installhook weitergeben oder sowas? wie ich sehe, scheint hier ja HInstance das eigenhandle der
DLL zu sein, das müsste also so stimmen.