2010-12-02 35 views
0

J'ai déjà posé une question sur quelque chose de similaire mais je crois que cette fois les circonstances sont différentes.appelant setwindowshookex avec WH_GETMESSAGE ne fonctionne sur aucun processus, sauf l'injecteur

J'ai une DLL qui a des fonctions standard de crochet, de décrochage et de msgProc. Je charge cette DLL dans mon application principale et ensuite appeler « crochet », qui est au-dessous:

HOOKDLL_API BOOL setHook(HWND hWnd, DWORD threadID) 
{ 

if(hWndServer != NULL) 
    return FALSE; 

hook = SetWindowsHookEx(WH_GETMESSAGE, (HOOKPROC)msghook, hInstance, threadID); 

if(hook != NULL) 
{ 
    hWndServer = hWnd; 

    ofstream logFile; 
    logFile.open("LOG.txt"); 
    logFile << "Hooked for: " << hWndServer << endl; 
    logFile.close(); 

    return TRUE; 
} 

return FALSE; 
} 

Le problème est que si je fais mondiale, avec ThreadID = 0, msghook seulement et ne capture que les messages reçus par la fenêtre du processus qui a chargé la bibliothèque et rien d'autre, même si c'est supposé être un hook global.

Si je fournis un threadID d'une autre fenêtre, je ne reçois aucun message.

Quelle pourrait être la raison de cela?

Répondre

3
  • Utilisez-vous Windows 64 bits? Si c'est le cas, votre processus de raccordement et DLL doivent correspondre à la bitness du processus souhaitez hooker.

  • Qu'est-ce que hInstance dans votre exemple? La DLL ou l'instance EXE? Il devrait être le DLL qui contient la fonction msgHook .

  • Que fait votre msgHook? Comment pouvez-vous détecter si oui ou non il est appelé? Notez qu'il sera appelé dans le (s) processus (s) que vous connectez, ne faisant pas partie de votre propre processus. (Donc, si vous avez défini un point d'arrêt sur elle, il ne sera pas déclenché à moins que vous attachez le débogueur au processus que vous avez accroché, plutôt que le processus qui installé le crochet.)

+0

Je vois, oui mon application est construite pour 32 et je le testais sur mspaint.exe qui est je crois 64 bits. Je l'ai essayé sur Skype et ça a marché. Bizarre cependant que cela a fonctionné pour certains sous-fenêtres seulement. Le repos est bien je crois. Bien que je ne peux pas capturer des clics sur, disons la barre d'état système, car il n'a pas fonctionné pour cela. –

+0

@DD: Cette question & réponses peut vous aider: http://stackoverflow.com/questions/4287352/is-there-a-way-for-application-on-windows-64-bit-to-execute-code- les deux-sous-64-bi / –