目次

  1. フックとは
  2. フックを使うと1
  3. フックを使うと1
  4. 制限の解除
  5. マウスフックのデメリット
  6. まとめ
フックとは
通常、キーが押されたり離されたりした場合Windows(OS)はウィンドウに対してウィンドウメッセージと呼ばれるメッセージを発行します。
アプリはこういったメッセージを受け取ることでそのメッセージに対する処理を行うことが出来ます。
キーボードフック、マウスフックはOSから発行されるキーとマウスに関するウィンドウメッセージをフック(横取り)します。
簡単に言いますとフックを行うとメッセージの伝わり方が「Windows >> ウィンドウ」となっているものが「Windows >> KeyToKey >> ウィンドウ」に変わります。

フックを使うと1
フックを使ってウィンドウメッセージを横取りすることで、横取りしたメッセージをウィンドウに伝えるのか、はたまた破棄(キャンセル)するのかを決めることが出来ます。
つまりキーボードやマウスの入力キャンセルができるようになります。

例えば、AキーにBキーを割り当てた時、大抵の場合Aキーの入力は必要ない(ウィンドウに伝わってほしくない)ですよね。そういうときに入力キャンセルが必要になるわけです。
各種割り当て設定にはトリガーの入力をキャンセルの項目が存在します。この項目を有効にすることでキャンセルが可能になります。
フックを使うと2
ウィンドウメッセージをフックするとウィンドウメッセージに付随するデータも取得することが可能になります。
そこには入力に関するデータがあるのですが、とくに重要なのが入力が物理デバイスによる入力なのか、シミューレーターによる入力なのかを判断するデータです。
このデータを使用することによって、各種割り当ての実行は物理デバイスからの入力にのみ制限することが出来ます。

なぜ、そのように実行を制限する必要があるのか制限がない状態の例を上げてみます。
AキーにBキーを割り当てたとしましょう。Aキーを押したらどうなるでしょうか。
アプリによってBキーが入力されますよね。

では、続いて B キーに C キーを割り当てたとしましょう。この設定のとき A キーを押したらどうなるでしょうか?
A キーを押したことにより、アプリが B キーを押し、B キーが押されたことによって、アプリが C キーを押します。

制限のない状態では連鎖入力が発生します。しかし、たいていの場合このような連鎖入力は必要がない、もしくは邪魔になることが想定されます。
もし、制限をしている状態であれば、A キーによって押された B キーがアプリによる入力だと判断し、C キーを入力できないようにすることが出来ます。

もう一つ例を上げてみましょう。
左クリックに左クリック(連射)を割り当て、左クリックを入力したらどうなるでしょうか?
左クリックが押されたことによりアプリによって左クリックが押され、左クリックが押されたことによりアプリによって左クリックが押され・・・以下略 と訳のわからない連鎖状態になることが予想されます(実際に考えたとおりになるとは限りませんが)
この場合でも制限をしておくと、左クリックがアプリによる入力だと判断できれば連鎖状態にならずに済みます。

各種割り当ての実行は物理デバイスからの入力のみに制限しなければとても不便になることがわかるかと思います。
制限の解除
実はフックを使うと2で説明した制限は意図的に解除することも可能です。
よく質問に来るのがリモートデスクトップやJoyToKeyの入力でマクロやキーを入力したいといった質問です。
アプリによる入力は大半がアプリによるものなので制限しているとマクロやキーの実行ができなくなります。制限を解除できるようにした理由はこのようなこともあるためです。

設定は割り当て設定(キー/マウス)の上部にある南京錠のマークから行えます。
1
マウスフックのデメリット
マウスフックを使用することにはデメリットもあるのです。マウスフックではボタンの入力の他にマウスの移動も横取りしてしまうのです。しかし一体それの何が問題なのでしょうか?
フックとはの項目では「フックを行うとメッセージの伝わり方が「Windows >> ウィンドウ」となっているものが「Windows >> KeyToKey >> ウィンドウ」に変わります。」と書きました。
これはつまり、KeyToKeyの処理に遅延が生じればウィンドウに伝わる時間に遅延が生じ、マウスの移動にも遅延が生じ、快適なマウス操作を損なう可能性があるということにもなるのです。
とくに繊細なマウス操作を行うゲームをやっている方であればその気持ち悪さがわかるかもしれません。

以上の理由からマウスフックの設定はデフォルトでは有効になっていません。
もし、そんなの気にしない、マウスの入力をキャンセル/制限したいんだというのであれば、
「環境設定」の「オプション」から有効にするといいでしょう。

まとめ
長々と書きましたが要約しますと
  • フックを使えば入力をキャンセルすることができる
  • フックを使えば物理デバイスから入力されたのかアプリから入力されたのかを判別できる
  • 判別することによって物理デバイスからの入力でのみマクロ等を実行できるように制限することが可能
  • 制限は意図的に解除することも可能(JoyTokeyやリモートデスクトップなどでマクロ等を実行したい場合は解除する必要がある)
  • マウスフックは快適な操作を損なう可能性があるのでデフォルトでは使用しない設定になっている