Aufgerufen werden die Funktinen in der DLL über
Quelltext
1:
| Function InstallHook(Hwnd: Hwnd; WaitTime: Integer): Boolean; stdcall; external 'keyboardhook.dll'; |
Ausschnitt aus der DLL:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36:
| library KeyboardHook;
uses ...
var HookHandle: hWnd = 0; WindowHandle: hWnd = 0; WTime: Integer;
function KeyboardHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; begin Result := CallNextHookEx(HookHandle, nCode, wParam, lParam); if nCode<0 Then exit; if wParam=Ord('S') Then if (lParam and Trunc(Power(2,31)))=Trunc(Power(2,31)) Then begin //Wird ausgeführt, wenn "S" losgelassen wird //WindowHandle und WTime sind jetzt 0; end; end;
function InstallHook(Hwnd: Hwnd; WaitTime: Integer): Boolean; stdcall; begin Result := False; if HookHandle = 0 then begin HookHandle := SetWindowsHookEx(WH_KEYBOARD, @KeyboardHookProc, HInstance, 0); WindowHandle := Hwnd; //Hier wird WindowHandle gesetzt Result := TRUE; WTime:=WaitTime; //Hier wird WTime gesetzt end; end;
exports InstallHook, UninstallHook; end. |
Bei der Installations-Funktion werden die Variablen WaitTime und HWND übergeben und in die Variablen WTime und WindowHandle übergeben.
Bei der Hauptprozedur, die auf die Tastatureingaben reagiert, kann diese Variablen nicht mehr auswerten, da diese wieder 0 sind.
Kann es vielleicht am Aufruf über "external ..." liegen?
Das Leben ist ein Sch...-Spiel, aber die Grafik ist cool.