これが状況です。2つの異なるウィンドウフックがあります。1つは新しいトップレベルウィンドウを監視するWH_SHELLのグローバルフックで、もう1つはWH_CALLWNDPROCのスレッドフックで、最初に検出されたトップレベルウィンドウの一部に設定されています。針。2つのフックは異なるDLLに実装されています。
私の知る限り、両方のフックが正しく取り付けられています。ただし、メッセージコード> WM_USERを使用してフックウィンドウに投稿するものは何もありません。登録メッセージはカスタムWH_CALLWNDPROCフックによって処理されますが、「通常の」ウィンドウメッセージは問題なく通過します。
検出されたウィンドウをフックするコード:
... Getting handle, mod, and procHook ...
DWORD threadId = GetWindowThreadProcessId(handle, NULL);
HHOOK hook = SetWindowsHookEx(WH_CALLWNDPROC, (HOOKPROC)procHook, mod, threadId);
if(!PostMessage(handle, CUSTOM_MESSAGE, NULL, NULL))
{
... fetch and print error message ...
}
フック自体の本体:
... Report sends a message to an agreed upon window with the passed wParam & lParam
Report(20, nCode);
if(nCode == CUSTOM_MESSAGE)
{
... This code is never reached ...
Report(50, ERROR_SUCCESS);
if(PerformTask())
Report(200, ERROR_SUCCESS);
else
Report(400, ERROR_SUCCESS);
}
... More code handling more messages in the same basic form
最初のレポート呼び出しは、フックがインストールされて機能していることを確認したものです。これは、10代から20代の低いメッセージ(ERASEBACKGROUND、PAINTなど)をポストバックするためです。
CUSTOM_MESSAGEは、WM_USER + 314として定義されています。Report(...)に使用されるメッセージは、WM_USER+317です。
その後、RegisterWindowMessageを使用して送信するUINTを取得するようにコードを更新しましたが、プロセス間通信にWM_USERを使用するのは正しくありませんでした。
それで、基本的に、私のデザインまたはWindowsフックとPostMessageの使用法の何が問題になっていますか?詳細を省略した場合は、お知らせください。たくさんのコードが関係していて、これはすでにかなり大きな質問なので、私は自分が関連していると思うものだけを含めるようにしました。
余談ですが、フックをデバッグするための合意されたより良い方法はありますか?私は、合意されたウィンドウにメッセージを投稿し、そのWndProcをデバッグすることによって、cout<<...すべてと同等の道徳を使用してきました。
ありがとう、-
ケビンモントローズ