Einzelnen Beitrag anzeigen

TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#1

Hook produziert wo Error?

  Alt 28. Jan 2004, 06:12
Hallo,

ich bräuchte mal ein paar gute Inspirationen bezüglich einer Hookinstallation.

Und zwar möchte ich mittels eines Programmes 'A' einen Maushook in einem anderen Programm 'B' installieren.

[
Zuvor habe ich schon einen globalen Mousehook mit folgender Zeile erfolgreich zum Laufen gebracht:

HookHandle := SetWindowsHookEx(WH_Keyboard, @spcHookProc,HInstance, 0);

...und einen localen der quasi im eigenen Programm 'A' selbst installiert wurde mit dieser Installationszeile:

HookHandle := SetWindowsHookEx(WH_Mouse, @spcHookProc, 0, AThreadID);
]


Jetzt also zu Programm 'A' möchte in Programm 'B' einen Hook installieren. Dazu habe ich alsodann folgende Zeilen benutzt:

ZielWndHandle := FindWindow('TApplication', 'HookDestination');
AHInstance := GetWindowLong(ZielWndHandle, GWL_HINSTANCE);
AThreadID := GetWindowThreadProcessId(ZielWndHandle);
HookHandle := SetWindowsHookEx(WH_Mouse, @spcHookProc, AHInstance, AThreadID);

Der Effekt jedesmal war: Wenn ich mit der Maus auf Programm-Window 'B' drauffahre, gibt's folgenden Error:

---------------------------
HookDestination: ShowDateTime.exe - Fehler in Anwendung
---------------------------
Die Anweisung in "0x01783518" verweist auf Speicher in "0x01783518". Der Vorgang
"read" konnte nicht auf dem Speicher durchgeführt werden.

Klicken Sie auf "OK", um das Programm zu beenden.
Klicken Sie auf "Abbrechen", um das Programm zu debuggen.
---------------------------
OK Abbrechen
---------------------------

Einerseits zeigt mir das zwar, dass der Hook auch bei Programm 'B' angekommen sein muss, andererseits kann ich mit dieser Errormeldung aber trotzdem irgendwie nichts richtiges anfangen. Eigentlich kann es ja nur an der Hook-Routine selbst liegen. Die allerdings habe ich zwecks Fehlersuche in der Zwischenzeit auf nur noch mehr eine einzige Zeile reduziert, nämlich diese:

Result := CallNextHookEx(HookHandle, nCode, wParam, lParam);

Und beim anfänglichen globalen und localen Hook gab es da ja auch nie einen solchen Error, weder in der HookProc noch überhaupt. Hat eventuell irgendjemand eine Idee was das mit diesem Error auf sich hat, bzw. wie man den event. weg bekommt?

Thx schonmal im Voraus
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat