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?
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. –
@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 / –