こんばんは。
グローバルキーフックのついたアプリケーションを作ろうとこちらのサイトのプログラムを書いてみました。
http://fa11enprince.hatenablog.com/entr ... /10/051454
キーを押すとメッセージボックスを出すことには成功しましたがメッセージボックスを消した後にそのキーが押されたのと同じ反応が起こってしまいます。
例として、WINキーを押すとメニューが表示されてしまいます。
キーを押すとそのキーが完全に無効化されるようにしたいのですがどのようにすればよいでしょうか?
開発環境はWindows10、VisualStudio2015です。
グローバルキーフックについて
Re: グローバルキーフックについて
どうしてグローバルキーフックの方法を知りたいと思ったのですか?
Re: グローバルキーフックについて
アプリケーション選択画面からアプリを選ぶと起動するランチャーを制作したいと考えています。
そこで、使う予定のないWindowsキーとALTキーをロックしたいです。
一つのアプリケーションにキーフックとランチャーをまとめる必要はなく、キーフック単体でのアプリケーションでもかまわないためキーフックについてのみ質問させていただきました。
そこで、使う予定のないWindowsキーとALTキーをロックしたいです。
一つのアプリケーションにキーフックとランチャーをまとめる必要はなく、キーフック単体でのアプリケーションでもかまわないためキーフックについてのみ質問させていただきました。
Re: グローバルキーフックについて
フックまわりは詳しくないですが……。
CallNextHookExを呼べば,それはそのままシステム既定の処理まで辿り着くのは想像が付きます。
で,MSDNを読むと,処理をして後続の処理を断ちたい場合は非0を返せ,とあります。
refs)
CallNextHookEx function
KeyboardProc callback function
CallNextHookExを呼べば,それはそのままシステム既定の処理まで辿り着くのは想像が付きます。
で,MSDNを読むと,処理をして後続の処理を断ちたい場合は非0を返せ,とあります。
なので,処理をした場合はCallNextHookExを呼ばずに0以外の値を返してみてはどうでしょうか。KeyboardProc callback function さんが書きました:If the hook procedure processed the message, it may return a nonzero value to prevent the system from passing the message to the rest of the hook chain or the target window procedure.
refs)
CallNextHookEx function
KeyboardProc callback function
Re: グローバルキーフックについて
試しにGlobalHookDll.cpp内の KeyHookProc関数においてreturn1を追加したところALTキーのキーフックが成功しました!
ありがとうございます!
ただ、WINキー、それとALT + TABキーによるタスク切り替えが防がれないのは仕様なのでしょうか?
もしお分わかりでしたら教えて頂きたいです。
ありがとうございます!
ただ、WINキー、それとALT + TABキーによるタスク切り替えが防がれないのは仕様なのでしょうか?
もしお分わかりでしたら教えて頂きたいです。
Re: グローバルキーフックについて
WH_KEYBOARDではなく、WH_KEYBOARD_LLを使用してください。
EXPORT_API_ LRESULT CALLBACK KeyHookProc(int nCode, WPARAM wp, LPARAM lp)
{
if (nCode == HC_ACTION)
{
KBDLLHOOKSTRUCT*pKBHS = (KBDLLHOOKSTRUCT*)lp;
if (pKBHS->vkCode == 91 //左Windowsキー
|| pKBHS->vkCode == 92 //右Windowsキー
|| (pKBHS->flags == 32 && pKBHS->vkCode == 9) //左右Alt+Tab
|| (pKBHS->flags == 160 && pKBHS->vkCode == 9) //左右Alt+Tab
|| pKBHS->vkCode == 164 //左Alt
|| pKBHS->vkCode == 165 //右Alt
) return TRUE;//100ms以内に0以外を返すと無効になる
}
return CallNextHookEx(hKeyHook, nCode, wp, lp);
}