c ++ - SetWindowsHookEx proces-wide i stedet for system-wide

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg vil gerne bruge SetWindowHookEx til at fange WM\_CREATE (eller HCBT\_CREATEWND) meddelelser i en proces, før der oprettes et vindue.


Ved hjælp af hMod og dwThreadId er det muligt at definere om krogen vil være systemomfattende (ved at indstille hMod til at være DLL'ens og dwThreadId til 0), er det også muligt at bruge den til at overvåge en enkelt tråd i en proces (hMod=0 og dwThreadId=ThreadToMonitorId).


Men jeg vil gerne overvåge flere tråde. Er det muligt? Jeg antager, at jeg bare kan ringe til SetWindowHookEx til flere tråde, men jeg vil helst ikke, da det ville gøre tingene mere komplekse. Er der andre alternativer?


Tak!

Bedste reference


Det er meget usædvanligt, at en proces skaber mere end en tråd, der ejer et brugergrænseflade. Nogle gange er det et interop-vindue, der er bevidst skjult, det er usandsynligt, at du vil vide om det. Kontroller dine antagelser med Spy ++, ejeren tråd ID er vist i vindue egenskaber, proces fanen.


Hvis det har mere end en tråd, der skaber vinduer, som du vil vide om, så vil du indstille separate kroge.

Andre referencer 1


Du kan koble alle processer og kun behandle WM\_CREATE for den aktuelle proces. Som krogen kaldes i forbindelse med selve processen, kan du blot sammenligne GetProcessId() med det ønskede proces id.