私はこれまで同様のことについて以前に質問しましたが、今回は状況が異なると思います。WH_GETMESSAGEでsetwindowshookexを呼び出すことは、インジェクタ以外のどのプロセスでも機能しません。
標準のhook、unhook、およびmsgProc関数を持つDLLがあります。私は私のメインのアプリケーションでこのDLLをロードし、「フック」と呼ぶ、それは以下の通りです:
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;
}
問題は、私はスレッドID = 0で、それがグローバルにする場合は、msgHookのみしか受信したメッセージをキャプチャしていることですライブラリーをロードしたプロセスのウィンドウとそれ以外のものは、たとえそれがグローバルフックであると思われるとしても。
他のウィンドウのthreadIDを指定すると、メッセージはまったく受信されません。
おそらく原因は何でしょうか?
私のアプリケーションは32用に作られています。私はmspaint.exe上でテストしていましたが、私は64ビットと信じています。私はSkypeで試してみました。それはそれの特定のサブウィンドウのためにのみ働いた奇妙です。私は信じてもらえません。それはそれのために仕事をしなかったので、私はクリックをキャプチャすることはできませんが、システムトレイと言うことができますが。 –
@DD:この質問と回答はあなたを助けるかもしれません:http://stackoverflow.com/questions/4287352/is-there-a-way-for-application-on-windows-64-bit-to-execute-code-両方とも64-bi / –