c ++ - SetWindowsHookEx () arbejder kun for den aktuelle proces

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at koble til WM\_PAINT-begivenheder i et vindue oprettet af en separat proces, og den eneste mulighed jeg ved for at opnå dette er at gøre brug af SetWindowsHookEx (). [2] [3]


Jeg har en C + + eksekverbar, der kører følgende kode:


HMODULE hDllInstance = LoadLibrary(L"NiceLibrary");
HOOKPROC pOverlayHook = (HOOKPROC) GetProcAddress(hDllInstance, "OverlayHook");
SetWindowsHookEx(WH\_GETMESSAGE, pOverlayHook, hDllInstance, 0 /*dwThreadId*/);


og 'NiceLibrary.dll' indeholder funktionen OverlayHook (...). Jeg har lagt en printf ('bla') i funktionen for at overvåge, når den hedder. Af en eller anden grund vises 'bla' kun for begivenheder, der genereres af den aktuelle proces, selv om MSDN-dokumentationen angiver, at: [4]



  dwThreadId [[i]]

  
  Identifikatoren af ​​tråden med hvilken
  krogproceduren skal associeres. Til desktop apps, hvis dette
  parameteren er nul, krokproceduren er forbundet med alle eksisterende
  tråde, der kører i samme skrivebord som opkaldstråden.



Også, ringer GetLastError () returnerer 0 efter SetWindowsHookEx (), hvilket betyder, at der ikke opstod nogen fejl. [5]


Ved du hvad jeg gør galt, tak?

Bedste reference