2009-05-18 11 views
1

Windowsフックを使用して別のアプリケーションのメッセージを取得しようとしています。 SetWindowsHookExでWH_GETMESSAGEフックをセットアップしました。これはDLLを介して行われます。私のGetMsgProc関数(ターゲットアプリケーションがメッセージを受信するたびに呼び出されるはずです)では、メッセージのタイプに基づいてアクションを実行したいと思います。しかし、私はこのif文に問題があります。フックフィルター機能でのWindowsメッセージのフィルタリング

LRESULT CALLBACK MessageHookProcedure(int code, WPARAM wParam, LPARAM lParam){ 
    if(((MSG*)lParam)->message == WM_COMMAND){ 
     MessageBox(NULL,L"The hook procedure was called",L"Test Window",MB_OK); 
    } 

    return CallNextHookEx(g_MessageHook,code,wParam,lParam); 
} 

何らかの理由で、MessageBoxが作成されることはありません。私は、アプリケーションがSpy ++からWM_COMMANDメッセージを受信して​​いることを知っています。 IF文を取り出すと、MessageBoxはさまざまなメッセージを受け取るので何度も作成されます。

答えて

1

正しいウィンドウまたは正しいメッセージにそれぞれ接続してもよろしいですか?場合によっては、WM_COMMANDの代わりにWM_SYSCOMMANDまたはWM_MENUCOMMANDが生成されます。

コードが正常に表示され、受信メッセージをコンソールにダンプしてみましたか?

+0

私はあなたが正しいと思う、間違ったウィンドウにフックしなければならない。私は私の論理をチェックします。私のコードを見ていただきありがとうございます。 – JohnG

0

ここで、LPARAMはCWPSTRUCTへのポインタであり、CWPSTRUCTはメッセージパラメータを含んでいます。次は動作するはずです。

LRESULT CALLBACK MessageHookProcedure(int code, WPARAM wParam, LPARAM lParam){ 
    if(((CWPSTRUCT*)lParam)->message == WM_COMMAND){ 
     MessageBox(NULL,L"The hook procedure was called",L"Test Window",MB_OK); 
    } 

    return CallNextHookEx(g_MessageHook,code,wParam,lParam); 
} 
+0

あなたのご意見も役に立ちました。私は実際にあなたが言及したようにCWPSTRUCTを使用するWH_CALLWNDPROCフックで必要な機能を持っています。私も間違った窓を引っ掛けていた。 :) 助けてくれてありがとう! – JohnG

関連する問題