Laden...

lokale hooks mit SetWindowsHookEx

Erstellt von gemino vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.233 Views
G
gemino Themenstarter:in
7 Beiträge seit 2006
vor 17 Jahren
lokale hooks mit SetWindowsHookEx

hallo,
ich habe eine anwendung nach dem tutorial von Dino Esposito auf MSDN (HIER) erstellt weil ich gerne einen lokalen Hook auf eine fremde anwendung erstellen möchte.
solange ich als vierten parameter von

SetWindowsHookEx(HookType code, HookProc func, IntPtr hInstance, int threadID)

den aufruf

(int)AppDomain.GetCurrentThreadId()

verwende funktioniert alles super. ist ja auch meine eigene anwendung.

wenn ich jetzt aber auf einen anderen thread verweise, und zwar auf die andere anwendung, dann wird kein hook mehr gesetzt. gibts da noch andere parameter die ich einstellen muss? laut dem tutorial von MSDN hätte ich eigentlich gedacht die threadID zu ändern würde ausreichen.

hoffe es kann mir jemand weiterhelfen.

V
52 Beiträge seit 2006
vor 17 Jahren

Du musst wahrscheinlich die funktion die aufgerufen werden soll in eine dll packen, weil man sie sonst nur aus der eigenen exe aufrufen kann, nicht aber der "gehookten" exe.

siehe auch:
OldNewThing Blog

G
gemino Themenstarter:in
7 Beiträge seit 2006
vor 17 Jahren

hm, das führt zumindest mal schon dazu, dass die fremde anwendung abstürzt und anscheinend ein hook gesetzt wird. abstürzen ist zwar nicht so super, aber mal schon besser als gar kein hook.

kann ich eigentlich ohne probleme lokale hooks auf andere anwendungen setzen? oder gibts einen punkt wo ich auf c++ klassen mit unmanaged code ausweichen muss? oder brauch ich den nur für globale hooks?

V
52 Beiträge seit 2006
vor 17 Jahren

Ich hab leider kaum Erfahrung mit lokalen Hooks, aber vllt hilft es ja wenn du mal beschreibst was du überhaupt hookst.

mfg v1vec

G
gemino Themenstarter:in
7 Beiträge seit 2006
vor 17 Jahren

im prinzip geht es darum ein overlay für eine andere anwendung zu erstellen. soweit funktioniert das auch alles. allerdings geht es dann darum, das overlay auch mitzubewegen, wenn die andere anwendung verschoben wird.
eine variante wäre natürlich einen timer zu installieren, der in einem vorgegebenen intervall ein update der fensterposition macht.
besser finde ich allerdings die möglichkeit einen CBT hook an die fremde anwendung zu hängen, so dass ich das event direkt von windows gemeldet bekomme und sofort drauf reagieren kann.

tja und genau da sind wie wieder bei meinem vorigen posting, dass ein fehler entsteht wenn ich den hook erstelle.