掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
キーボードフォーカス有無を判定するには? (ID:73657)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>オショウさん 返答ありがとうございます。 必要な時だけフックを行った方が他への影響が少ないと思いこのようにしました。 今後の為に教えて頂きたいのですが、なぜ必要な時だけフックを行うのは危ないのでしょうか? エクスプローラのフォーカス移動のイベントを拾うためにDLL内で //フックインストール extern "C" __declspec(dllexport) void HookInstall(HWND hWnd, LONG fcsMsg) { if (g_hDll == NULL) { return; } else { g_hWnd = hWnd; g_fcsMsg = fcsMsg; hHookCbt = SetWindowsHookEx(WH_CBT, (HOOKPROC)CbtProc, g_hDll, 0 ); if ( hHookCbt == NULL){ MessageBox(NULL,"CBTフック失敗","エラー",MB_OK | MB_TOPMOST); } else { // MessageBox(NULL,"CBTフック成功","成功",MB_OK | MB_TOPMOST); } } } // Cbtプロシージャ LRESULT CALLBACK CbtProc(int nCode, WPARAM wParam, LPARAM lParam) { BOOL bHandle = FALSE; TRACE("CBT %d\n", nCode); if ( nCode < 0 ) { return CallNextHookEx(hHookCbt, nCode, wParam, lParam); } switch (nCode) { case HCBT_SETFOCUS: // wParam:キーボードフォーカスを受け取るハンドル // lParam:キーボードフォーカスを失うハンドル // 自分にメッセージ送信 if (g_hWnd) { ::PostMessage(g_hWnd, g_fcsMsg, wParam, lParam); } break; default: break; } // フックを行わない処理は、必ず次の関数に処理を委ねる return CallNextHookEx(hHookCbt, nCode, wParam, lParam); } としましたが、CbtProc関数が自アプリのイベントしか拾えません。 エクスプローラのフォーカスイベントはこの方法では拾えないのでしょうか? よろしくお願いします。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.