トップ回答者
フックを解除できない。

質問
-
いつもお世話になります。
MFC SDIプログラムでローカルキーボードフックする使用していますが、他のプログラムをアクティブにしてもフックを解除できません。
アドバイスをお願いします。
void CMainFrame::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized) { CFrameWnd::OnActivate(nState, pWndOther, bMinimized); // TODO: ここにメッセージ ハンドラー コードを追加します。 CString str; str.Format(L"CMainFrame::OnActivate %X\r\n", nState); OutputDebugString(str); if ( nState == WA_ACTIVE || nState == WA_CLICKACTIVE ) { theApp.KeyHookOn(); } else{ theApp.KeyHookOff(); } } void CxxxApp::KeyHookOn() { OutputDebugString(L"HookOn\r\n"); hHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyHookProc, NULL, 0); // hHookはCxxxのメンバー変数 } void CxxxApp::KeyHookOff() { CString str; str.Format(L"HookOff %x\r\n", hHook); OutputDebugString(str); UnhookWindowsHookEx(hHook); }
回答
-
私の環境(Win10 x64 & VS2010)でご質問者さんのように関数を追加してみましたが、再現しませんでした。
以下は検証で作成したプログラムです。(キーボードフックでESCを打つと'A'と入力される、他のウィンドウがアクティブになるとフックは解除される。)
http://work.vc/KeyboardHook.zip
Visual Studioのバージョン、再現するOSは何になりますでしょうか?
- 編集済み kenjinoteMVP 2016年7月7日 2:49
- 回答の候補に設定 AzuleanMVP, Moderator 2016年7月7日 13:19
- 回答としてマーク 村尾DOS 2016年7月8日 0:08
すべての返信
-
私の環境(Win10 x64 & VS2010)でご質問者さんのように関数を追加してみましたが、再現しませんでした。
以下は検証で作成したプログラムです。(キーボードフックでESCを打つと'A'と入力される、他のウィンドウがアクティブになるとフックは解除される。)
http://work.vc/KeyboardHook.zip
Visual Studioのバージョン、再現するOSは何になりますでしょうか?
- 編集済み kenjinoteMVP 2016年7月7日 2:49
- 回答の候補に設定 AzuleanMVP, Moderator 2016年7月7日 13:19
- 回答としてマーク 村尾DOS 2016年7月8日 0:08