Das ist keineswegs - wie du vielleicht annimmst, Timo - eines meiner ersten Programme, sondern nur mein erstes, das Hooks verwendet.
Ich habe den ersten Quelltext (ich will ja nur überwachen, nicht manipulieren, also brauche ich die DLL weiter unten nicht) halbwegs verstanden und dann kopiert.
Jetzt habe ich auch herausgefunden, dass man nur FormCreate und -Destroy deklarieren und mit dem Form verknüpfen muss und die andere Funktion einfach als erstes hinschreibt.
Trotzdem funktioniert es nicht - die Funktion wird nicht aufgerufen.
Falls ihr mir dadurch besser helfen könnt - hier ist mein aktueller Quelltext:
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: 37: 38: 39: 40: 41: 42: 43:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;
type TForm1 = class(TForm) procedure FormDestroy(Sender: TObject); procedure FormCreate(Sender: TObject); private public end;
var Form1: TForm1; hMouseHook: HHOOK;
implementation
{$R *.dfm}
function UnsereMouseFunktion(nCode: integer; wparam: WPARAM; lParam: LPARAM):Integer; stdcall; begin if(wParam = WM_LBUTTONDOWN) then ShowMessage('Linke Maustaste gedrückt!'); Result := CallNextHookEx(hMouseHook, nCode, wParam, lParam); end;
procedure TForm1.FormCreate(Sender:TObject); begin hMouseHook := SetWindowsHookEx( WH_MOUSE, UnsereMouseFunktion, 0, 0); end;
procedure TForm1.FormDestroy(Sender:TObject); begin UnhookWindowsHookEx(hMouseHook); end;
end. |
---
Moderiert von
Narses: Beiträge zusammengefasst---
Ich habe mich jetzt mit Assarbads Tutorial auseinandergesetzt und kann jetzt aus seiner DLL einen Hook einrichten.
In der DLL habe ich an der Stelle, wo man verarbeiten kann, ein "ShowMessage" hingesetzt - erfolglos.
Was mache ich falsch?
---
Moderiert von
Narses: Beiträge zusammengefasst---
Ich habe jetzt herausgefunden, dass die Wenn-Nachricht-Ankommt-Routine nach jedem Registrieren des Hooks 16 mal aufgerufen wird und dann in tiefes Schweigen versinkt, bis man den Hook deinstalliert und wieder installiert.
EDIT: Der Parameter nCode ist dabei jeweils 0, wparam einmal sicher 512(=MOUSEMOVE) und 15 mal irgendwas (manchmal auch 512) und lparam irgendwas rund um 1200000.