2010-12-02 3 views
0

Ich habe zuvor eine Frage über etwas ähnliches gestellt, aber ich glaube, diesmal sind die Umstände anders.aufrufen Setwindowshookex mit WH_GETMESSAGE funktioniert nicht mit jedem Prozess außer dem Injektor

Ich habe eine DLL, die Standard Hook, Unhook und msgProc Funktionen hat. Ich lade diese DLL in meiner Hauptanwendung und rufe dann ‚Haken‘, das heißt unter:

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; 
} 

Das Problem ist, dass, wenn ich es global zu machen, mit threadID = 0, dann Msghook nur und nur die Nachrichten erfaßt empfangen am Fenster des Prozesses, der die Bibliothek geladen hat und sonst nichts, auch wenn es ein globaler Haken sein soll.

Wenn ich eine threadID eines anderen Fensters liefere, dann erhalte ich überhaupt keine Nachrichten.

Was könnte der Grund dafür sein?

Antwort

3
  • Verwenden Sie 64-Bit-Windows? Wenn ja, Ihr Hook-Prozess und DLL müssen die Bissigkeit der Prozess (en) Sie möchten Haken.

  • Was ist HInstance in Ihrem Beispiel? Die DLL oder die EXE-Instanz? Es sollte die DLL sein, die die msgHook-Funktion enthält.

  • Was macht Ihr msgHook? Wie erkennen Sie , ob es genannt wird oder nicht? Beachten Sie, dass es innerhalb der Prozesse aufgerufen wird, die Sie haken, nicht in Ihrem eigenen Prozess. (Also, wenn Sie einen Haltepunkt auf sie festgelegt haben, es nicht ausgelöst werden, wenn Sie der Debugger an den Prozess anhängen Sie haben gehakt, anstatt den Prozess, der den Haken installiert.)

+0

Ich sehe, ja meine Anwendung ist für 32 gebaut und ich habe es auf mspaint.exe getestet, die ich glaube 64 Bit. Ich habe es auf Skype versucht und es hat funktioniert. Seltsam, dass es nur für bestimmte Unterfenster funktioniert. Ruhe ist in Ordnung, glaube ich. Obwohl ich keine Klicks erfassen kann, sagen wir, System Tray, weil es nicht funktioniert hat. –

+0

@DD: Diese Frage & Antworten können Ihnen helfen: http://stackoverflow.com/questions/4287352/is-there-a-way-for-application-on-windows-64-bit-to-execute-code- beide-unter-64-bi / –