Windows の Unity アプリでマウスイベントをフックする
こんにちは、たるこすです。
今回は Windows の Unity アプリケーションでマウスイベントをフックする方法についてです。
上記記事のコードを少し修正して使わせていただきました。
上記スクリプトを作成し、MouseHookTest.cs を GameObject にアタッチすることで、マウスカーソルの位置やマウスのボタンが押されたことを知ることができます。
また、MouseHookTest.cs の16行目 MouseHook.Disable()
を有効にすると Unity のウィンドウ内に限り、クリックを無効にすることができます。エディタ上の場合、Play ボタンをクリックして止めることもできなくなるので Ctrl + P で止める必要があります。
マウスカーソルの移動
MouseHook.SetCursorPos(x, y);
とすることで、x, y の位置にマウスカーソルを移動させることができます。
キーボードイベントのフック
MouseHook.cs の 194 行目は以下のようになっており、7 という値は Mouse を指しています。
Handle = NativeMethods.SetWindowsHookEx(7, hookCallback, h, (uint)AppDomain.GetCurrentThreadId());
これをキーボードイベント用に変更することでキーボードのフックもできると思ったのですが、なぜか Unity が落ちてしまいうまくいきませんでした。
おわりに
Unity でのマウスイベントの取得は、たいていの場合は Input.mousePosition や Input.GetMouseButtonDown などを使うことで十分だと思いますが、マウスカーソルの移動・無効化など特殊なことをしたい場合には今回紹介した方法を試してみてください。