2010/09/15

AutoHotkeyでマウスポインタの移動を感知する

doughnutSensor

AutoHotkeyはキーバインディングを目的としたスクリプト実効環境なので、キーイベントに関しては詳細な設定ができますが、ポインティングデバイスに関しては思った様には行きません。

マウスポインタが移動したかどうかを判定するには、一定間隔で座標を監視するタイマーを作るか、GUIを作成してOnMessageでウィンドウイベントを取るかしないと思われます。好きな場所でポインタが1ドット移動した、といったイベントをとる事ができません。

以前作成した、マウスジェスチャの様なランチャでは、中クリックがないMagicMouseのために、↓ジェスチャに中クリックを割り当てていました。

しかし構造上、ボタン押し下げと同時にランチャウィンドウがポインタの下に割り込むため、アクティブウィンドウが変更され、プルダウン等の一時的に表示されるコントロールが消えてしまう、という問題が発生。

何が困るかと言うと、Firefoxのブックマークツールバーにあるフォルダの中のブックマークを新しいタブで開く、という動作はプルダウンの要素を中クリックする必要があったのです。ランチャを実運用してみると、普段意識しない操作を意外に多く行っている事が判明しました。

Firefoxだけならば、タブの動作を変更もできますが、全てのアプリでそうとは行かず、ランチャ側で対応することに。

ということで、右ボタンを押し下げている間にポインタを動かさないと中クリック、動かした場合、改めてランチャを起動という仕様を実装するために、動いた/動いてないを判断する部分を作成したものです。

ランチャに組み込まないと、ただ右クリックが不便になるだけです。