2010-12-02 2 views
0

私はこれまで同様のことについて以前に質問しましたが、今回は状況が異なると思います。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を指定すると、メッセージはまったく受信されません。

おそらく原因は何でしょうか?

答えて

3
  • 64ビットWindowsを使用していますか?その場合、 フックプロセスとDLLは、 と一致する必要があります。 は、フックするプロセスのビット数です。

  • あなたの例ではhInstanceとは何ですか? DLLまたはEXEインスタンス? は、 msgHook関数を含むDLLである必要があります。

  • msgHookの機能は何ですか? は、 が呼び出されているかどうかをどのように検出しますか? と呼ばれるプロセス内には という名前のプロセスがありません。 (あなたがフックをインストールし フックではなく、プロセスをしたプロセスにデバッガ を添付しない限り 場合はそれにブレークポイントを設定して、それ がトリガされません。)

+0

私のアプリケーションは32用に作られています。私はmspaint.exe上でテストしていましたが、私は64ビットと信じています。私はSkypeで試してみました。それはそれの特定のサブウィンドウのためにのみ働いた奇妙です。私は信じてもらえません。それはそれのために仕事をしなかったので、私はクリックをキャプチャすることはできませんが、システムトレイと言うことができますが。 –

+0

@DD:この質問と回答はあなたを助けるかもしれません:http://stackoverflow.com/questions/4287352/is-there-a-way-for-application-on-windows-64-bit-to-execute-code-両方とも64-bi / –

関連する問題