- 締切済み
WM_INITDIALOGのフック
どこにも載っていないため質問させていただきます。 次のようなコードを書いたとき、ダイアログの出現の検知ができるWM_INITDIALOGを検知できないのはなぜでしょうか。 hHookForDialog = SetWindowsHookEx(WH_CALLWNDPROCRET, CallWndRetProcForDialog, hDll, 0); LRESULT CALLBACK CallWndRetProcForDialog(int nCode, WPARAM wp, LPARAM lp) { if(nCode < 0) return CallNextHookEx(hHookForDialog, nCode, wp, lp); PCWPRETSTRUCT Wmes = (PCWPRETSTRUCT)lp; if(nCode == HC_ACTION) { if(Wmes->message == WM_INITDIALOG) { PostMessage(hWndToSendMessage, mesDialogCreated, (WPARAM)(Wmes->hwnd), NULL); } } return CallNextHookEx(hHookForDialog, nCode, wp, lp); } フック自体は成功しているようで、条件文を外すとメッセージはたくさん飛んできます。 けれども目的のWM_INITDIALOGは無いようです。 どうすればいいのかご教授お願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- toda hiro(@hiro_knigh)
- ベストアンサー率39% (59/151)
教えてgoo内のC++のカテゴリを閲覧し、「WM_INITDIALOG フック」をキーワードにして「このカテゴリーから検索」「教えて!検索」を実施してみましょう。 少なからずヒントが見つかります。
補足
もちろん検索してみました。 今回はグローバルフックなので対象のアプリが起動していない云々は関係ないはずですし、他の回答を見ると出来そうなことが書いてあります。 しかし現に今できていませんし、作者は別ですがそれをしているアプリケーションもあるのです。