1


0

Windowsフックで他のアプリケーションへのメッセージを取得しようとしています。 SetWindowsHookExでWH_GETMESSAGEフックを設定しました。 これはDLLを介して行われます。 GetMsgProc関数(ターゲットアプリケーションがメッセージを受信したときに必ず呼び出される)で、メッセージの種類に基づいてアクションを実行します。 しかし、私はこれif文に問題があります。

LRESULT CALLBACK MessageHookProcedure(intコード、WPARAM wParam、LPARAM lParam){if((((MSG *)lParam) - >メッセージ== WM_COMMAND){MessageBox(NULL、L) MB_OK); }

CallNextHookEx(g_MessageHook、code、wParam、lParam)を返します。 }

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

2 Answer


1


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

あなたのコードはうまく見えます、あなたはまたコンソールに入ってくるメッセージをダンプしてみましたか?


0


ここでのLPARAMはCWPSTRUCTへのポインターであり、CWPSTRUCTにはメッセージ・パラメーターが入っています。 以下がうまくいくはずです。

LRESULT CALLBACK MessageHookProcedure(intコード、WPARAM wParam、LPARAM lParam){if(((CWPSTRUCT *)lParam) - > message == WM_COMMAND){MessageBox(NULL、L)フックプロシージャが呼び出されました "、L" Test Window "、 MB_OK); }

CallNextHookEx(g_MessageHook、code、wParam、lParam)を返します。 }