重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

どこにも載っていないため質問させていただきます。
次のようなコードを書いたとき、ダイアログの出現の検知ができる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は無いようです。
どうすればいいのかご教授お願いします。

A 回答 (1件)

教えてgoo内のC++のカテゴリを閲覧し、「WM_INITDIALOG フック」をキーワードにして「このカテゴリーから検索」「教えて!検索」を実施してみましょう。


少なからずヒントが見つかります。

この回答への補足

もちろん検索してみました。
今回はグローバルフックなので対象のアプリが起動していない云々は関係ないはずですし、他の回答を見ると出来そうなことが書いてあります。
しかし現に今できていませんし、作者は別ですがそれをしているアプリケーションもあるのです。

補足日時:2009/12/12 17:16
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!