1

Windowsフックを使用して別のアプリケーションのメッセージを取得しようとしています。SetWindowsHookExを使用してWH_GETMESSAGEフックを設定しました。これはDLLを介して行われます。GetMsgProc関数(ターゲットアプリケーションがメッセージを受信するたびに呼び出す必要があります)で、メッセージのタイプに基づいてアクションを実行したいと思います。ただし、このifステートメントで問題が発生しています。

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が何度も作成されます。

4

2 に答える 2

1

それぞれ正しいウィンドウまたは正しいメッセージをフックしていることを確認しますか?状況によってはWM_SYSCOMMAND、またはWM_MENUCOMMANDの代わりに生成されWM_COMMANDます。

コードは正常に見えますが、着信メッセージをコンソールにダンプしてみましたか?

于 2009-05-18T02:09:15.743 に答える
0

ここでのLPARAMは、メッセージパラメータを含む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);
}
于 2009-05-18T08:22:14.180 に答える