MouseGestureL.ahk - 使い方のヒント

添付のヘルプファイルには記載されていない新機能や設定方法の具体例、使用上の注意点などを掲載しています。

◆ マルチモニター環境で利用する場合の設定

AutoHotkeyはPer-Monitor DPIに対応していないため、マルチモニター環境でプライマリモニターとは異なる表示スケールが設定されたサブモニター上では、カーソル座標に関連した不具合が発生します。 これを回避するには、以下の手順でAutoHotkey.exeに対する高DPI設定を変更する必要があります。

  1. エクスプローラーでAutoHotkey.exe(Setup.vbsでインストールした場合はMouseGestureL.exe)のプロパティを表示する。
  2. 「互換性」タブを選択し、「設定」の中の「高DPI設定の変更」ボタンをクリックする。
  3. 「高DPIスケール設定の上書き」の中の「高DPIスケール設定の動作を上書きします。」をチェックする。
  4. 「拡大縮小の実行元」ドロップダウンリストで「アプリケーション」を選択する。(デフォルトで選択されています)
  5. 「OK」ボタンをクリックしてプロパティ画面を閉じる。

上記の設定変更によりサブモニター上でのジェスチャー機能は正常動作するようになりますが、設定画面等のダイアログBOXをサブモニターへ移動した際に、表示スケールに応じたウィンドウサイズの自動調節が行われなくなります。
なお、この設定変更はAutoHotkey用に作成されたMouseGestureL以外のスクリプトにも影響する点にご注意ください。

◆ Chromeのブックマークメニュー上での右クリック

以前のバージョンの初期設定を引き継いでいる場合、Google Chromeのブックマークメニュー上で右クリックすると、メニューが閉じてしまいます。
これを回避するには、「RB_」(右ボタン押し下げ操作)への割り当てアクションを以下の様に変更する必要があります。

RB_:

;アクティブ化 if (InStr(MG_WClass, "Chrome_WidgetWin")!=1 || (MG_WStyle & 0x000B0000)) { MG_WinActivate() }

この設定は Ver. 1.41以降では初期設定となっているため、最新バージョンを新規インストールした場合には、変更する必要はありません。

◆ マウスボタンやキーが押しっ放し状態になった時の対処方法

マウスボタンやキーが押しっ放し状態になった場合の対処用サブスクリプトとして、MGLを強制終了する「KillMGL.ahk」と、再起動する「RestartMGL.ahk」がToolsフォルダー内にあります。 (再起動したい場合は RestartMGL.ahk を実行するだけでOKです)
緊急時に使用するスクリプトなので、いざという時にアクセスしやすい場所へショートカットを作成しておくことをお奨めします。 なお、MGLを管理者の権限で実行している場合は、これらのサブスクリプトも管理者の権限で実行する必要があるので、ショートカットのプロパティーを表示し、詳細設定の「管理者として実行」をチェックしておいてください。

◆ 登録されているジェスチャーのリストを表示する

ジェスチャーの入力中にF1キーを押すと、それまでの入力内容に対応するジェスチャーのリストが表示されます。
例えば右ボタンを押しながらカーソルを下へ移動させた時点でF1キーを押すと、"RB_D"から始まる定義済みジェスチャーが一覧表示され、ジェスチャーのタイムアウトが一時的に無効化されます。 その状態からカーソルを移動させると、リストは閉じてジェスチャーの認識処理が再開されます。
ジェスチャーリストを表示させるためのキーは、設定「その他」の「ホットキー」セクションで変更が可能です。
なお、アクションスクリプトの1行目のコメントに、<HideHints>というタグを含めておくと、そのジェスチャーはリストに表示されなくなります。

◆ ウィンドウを一時的に画面の端やサブモニターへ移動し、後で元の位置へ戻す

ウィンドウをサブモニターや画面端ぴったりの位置へ移動させたい場合は、従来式の「ウィンドウの位置とサイズを変更」ではなく「ウィンドウを移動」を利用すると設定が簡単です。
このアクションは移動先にサブモニターや「元の位置」を選択することができるため、例えばジェスチャー1の移動先を「画面の右端」(またはサブモニター)、ジェスチャー2の移動先を「元の位置」のように設定しておくと、内容を比較したいウィンドウを一時的に横に並べ、作業が終わったら元の位置へ戻すといった使い方ができます。 「元の位置」への移動は、前回このアクションで移動させたウィンドウが対象となるので、ジェスチャーの入力はどのウィンドウ上で行っても構いません。

◆ 「ジェスチャーの入力状態を記憶1」の使用例

このアクションを使用すると、ジェスチャーストローク(マウスカーソルの方向移動)の後で、サブボタンのクリックやホイール回転を繰り返すようなジェスチャーの設定が可能になります。
以下の設定例では右ボタンを押しながらカーソルを下へ移動させた後、ホイールを下へ回転させると次のタスク、上へ回転させると前のタスクへ切り替わります。

RB_D:

;ジェスチャーの入力状態を記憶1 MG_SaveGesture() ; ジェスチャーの入力状態 "RB_D" を記憶する*1

RB_DWU_:

;前のタスク MG_DisableTimeout() ; タイムアウトを無効にする*2 MG_StopNavi() if (!GetKeyState("Shift")) { Send, {Shift down} ; Shiftキーが押されていなければ押す } if (!GetKeyState("Alt")) { Send, {Alt down} ; Altキーが押されていなければ押す } Send, {Tab} ; Tabキーを押す

RB_DWD_:

;次のタスク MG_DisableTimeout() ; タイムアウトを無効にする*2 MG_StopNavi() if (GetKeyState("Shift")) { Send, {Shift up} ; Shiftキーが押されていたら放す } if (!GetKeyState("Alt")) { Send, {Alt down} ; Altキーが押されていなければ押す } Send, {Tab} ; Tabキーを押す

RB_D_:

;タスク切り替え完了 if (GetKeyState("Alt")) { Send, {Alt up} ; Altキーが押されていたら放す } if (GetKeyState("Shift")) { Send, {Shift up} ; Shiftキーが押されていたら放す } ;他のアクションが未発動の場合に実行 if (MG_IsFirstAction()) { ; 他のアクションが発動していなければ*3 Send, ^{End} ; 最後へジャンプ }

*1 通常の設定では "RB_DWU_" への割り当てアクションは最初のホイール回転で1回だけ実行され、2回目以降のホイール回転からは "RB_WU_" のアクションが繰り返し実行されます。 これはアクション発動後にジェスチャーの認識状態が "RB_" までリセットされるためです。(添付ヘルプの「応用編」⇒「ジェスチャー定義-応用編-」⇒「連続発動型ジェスチャー」参照)
"RB_D" まで入力された時点でアクション「ジェスチャーの入力状態を記憶1」(MG_SaveGesture) を実行し入力状態を記憶しておくと、ホイール回転でリセットされた後の認識状態が "RB_D" になり、"RB_DWU_" や "RB_DWD_" のアクションを繰り返し実行できるようになります。

*2 トリガーボタンを押しながらカーソルを移動させた後、カーソルを一定時間静止させるとタイムアウトしてジェスチャーの入力判定は終了してしまいますが、アクション「タイムアウトを無効にする」(MG_DisableTimeout) を実行すると、それ以降はタイムアウトが発生しなくなります。

*3 右ボタンを放すとタスク切り替えが実行されるとともに、"RB_D_" へ元々割り当てられていた「最後へジャンプ」( Send, ^{End} ) も同時に発動してしまいます。
そこで、アクション「他のアクションが未発動の場合に実行」(MG_IsFirstAction) による条件分岐を利用し、タスク切り替えの実行後には「最後へジャンプ」が発動しないように設定しています。

※ 上記の例で "RB_D_" がデフォルト以外のターゲットへも割り当てられている場合は、それら全てのアクションに同じコードを記述する必要があります (「Send, ^{End}」の部分をターゲットごとのアクションに置き換える)。 これを省略するとAltキーやShiftキーが押しっ放し状態になるので、本設定例をそのまま利用する場合はご注意ください。 共通する処理は拡張スクリプト内にユーザー関数として記述しておき、それをアクションスクリプトから呼び出すようにすると記述がシンプルになります。
また誤操作防止のために、"RB_DL"、"RB_DR"、"RB_DU"、"RB_DD" の4パターンを含むジェスチャーを定義し、以下のようなタスク切り替えキャンセル用のアクションを登録しておくことをお奨めします。

タスク切り替えキャンセル (RB_DL、RB_DR、RB_DU、RB_DD):

;タスク切り替えを終了 if (GetKeyState("Alt")) { Send, {Alt up} } if (GetKeyState("Shift")) { Send, {Shift up} } MG_Cancel()

◆ 「ジェスチャーの入力状態を記憶2」の使用例

このアクションはジェスチャー入力中の任意の時点から、次にサブボタンが押し下げられるまでに行った入力操作を全てキャンセルします。
例えば右ボタンを押し下げた状態でカーソルを下方向へ、次に右方向へと移動させてから左ボタンを押し下げた場合、本来なら "RB_DRLB_" というジェスチャーとして認識されます。 しかし "RB_" の割り当てアクションで「ジェスチャーの入力状態を記憶2」(MG_SetBypass("LB")) を実行しておくと、左ボタンを押し下げた時点の "RB_DRLB_" からカーソルの移動を表す "DR" の部分が削除され、"RB_LB_" に割り当てられたアクションが発動するようになります。
このアクションはAutoHotkeyフォーラムに投稿されたユーザーからのリクエストに対応したものなので、具体的な利用目的はこちらを参照してください。
https://www.autohotkey.com/boards/viewtopic.php?p=574539#p574539

以下の設定例では、右ボタン押し下げ後すぐに左クリックした場合でも、右ボタンを押し下げた状態でドラッグ操作を行ってから左クリックした場合でも、共に "RB_LB_" へ割り当てたアクションが発動することを確認できます。

RB_:

;ジェスチャーの入力状態を記憶2 MG_SetBypass("LB") ; 左ボタンが押されたらこれ以降の操作をキャンセル ToolTip, RB_

RB_LB_:

ToolTip, RB_LB_

◆ MGLの起動時に初期化処理が完了した後で、ユーザー定義の処理を実行する

MGLの起動時、全ての初期化処理が完了してアイドル状態へ遷移する直前に何らかの処理を実行させたい場合は、拡張スクリプト(MG_User.ahk)内に MG_PostInit() という関数を作成し、その関数内に実行したい処理を記述してください。 例えばタスクトレイのメニューを自分用にカスタマイズしたり、MGLが起動した後で実行したいプログラムやスクリプトを起動することが出来ます。
また、設定ダイアログBOX(MG_Edit.ahk)の初期化完了時にも、同様にユーザー定義の処理を実行させることが可能で、こちらは関数名が ME_PostInit() となります。
この2つの関数は、タスクトレイのメニューから「拡張スクリプト編集」を初めて選択した際、MG_User.ahk 内にデフォルトで作成されます。 既に MG_User.ahk が作成されている場合は、手動で追加する必要があります。追加する場所は「ユーザー定義関数、サブルーチン」の位置( Goto, MG_User_End の後)です。

Goto, MG_User_End ;----- ユーザー定義関数、サブルーチン ---------------------------------------- MG_PostInit() { ; MouseGestureL.ahkの初期化処理完了後に実行したい処理を以下に記述 } ME_PostInit() { ; MG_Edit.ahkの初期化処理完了後に実行したい処理を以下に記述 }

この機能はAutoHotkeyフォーラムに投稿された下記のリクエストを受けて実装したものです。
https://www.autohotkey.com/boards/viewtopic.php?p=389025#p389025