MouseGestureL.ahk 新機能の説明
Ver. 1.39の主な変更内容
ゲームなどで右ボタンをトリガーとしたデフォルトジェスチャーは無効化したいが、拡張ボタンには機能を割り当てたいといった場合に使用します。
チェックBOXをONにするとデフォルトジェスチャーのターゲットから除外され、ターゲット固有のジェスチャーで使用するトリガーボタン以外はフック処理も行われなくなります。
Ver. 1.38の主な変更内容
理論的にはジェスチャーのターゲットとして登録されていないアプリケーションへの副作用がなくなっています。
そのため「特定のアプリケーションの特定の部位」などターゲットを狭い範囲に限定すれば、左ボタンをトリガーとしたジェスチャーを登録しても通常操作に影響を与えません。
オプション「トリガー操作を常時フック処理する」を有効化すると前バージョンまでの処理方法に戻ります。本バージョンから新たな不具合が発生するようであればチェックBOXをONにしてください。
要望を受けた機能ですが、ボリュームが大きくなったためプラグイン化しました。
解凍してPluginsフォルダーへコピーすると、アクションテンプレートのカテゴリー「その他」に「最後に閉じたフォルダーを開く」と「閉じたフォルダーをリスト表示」が追加されます。
Ver. 1.37の主な変更内容
ロッカージェスチャーなどの繰り返し操作を、カーソル移動後に入力するジェスチャーの設定用関数です。内容が複雑なので具体的な設定例を示します。
以下の例では右ボタンを押しながらカーソルを下へ移動させた後、ホイールを下へ回転させると次のタスク、上へ回転させると前のタスクへ切り替わります。
(1) 通常の設定では "RB_DWU_" への割り当てアクションは最初のホイール回転で1回だけ実行され、2回目以降のホイール回転からは "RB_WU_" のアクションが繰り返し実行されます。
これはアクション発動後にジェスチャーの認識状態が "RB_" までリセットされるためです。(ヘルプ「応用編」の「連続発動型ジェスチャー」参照)
"RB_D" の時点で MG_SaveGesture() を実行し入力状態を記憶ておくと、リセット処理後の認識状態が "RB_D" になるため、"RB_DWU_" や "RB_DWD_" のアクションを繰り返し実行できるようになります。
(2) トリガーボタンを押してからカーソルを移動させた後、カーソルを静止させておくとタイムアウトして認識処理は終了しますが、MG_DisableTimeout() を実行すると、それ以降はタイムアウトが発生しなくなります。
(3) 右ボタンを放すとタスク切り替えが実行されるとともに、本来 "RB_D_" で実行したいアクションも同時に発動しますが、MG_IsFirstAction()を条件に処理を分岐することでタスク切り替えの実行後には「Send, ^{End}」が発動しないようになります。
※上記の例で "RB_D_" がデフォルト以外のターゲットへも割り当てられている場合は、それら全てのアクションに同じコードを記述する必要があります (「Send, ^{End}」の部分は個別のアクションに置き換える)。
これを省略するとAltキーやShiftキーが押しっ放し状態になるので、本設定例をそのまま利用する場合はご注意ください。
さらには誤操作防止のため、以下4つのジェスチャーも登録しておくことを推奨します。キーリリース処理の部分はユーザー関数化して拡張スクリプトに書いておけば、アクションをシンプルに記述できます。
Microsoft EdgeなどのUWPアプリをターゲットに登録する場合ウィンドウクラス名は「ApplicationFrameWindow」、実行ファイル名は「ApplicationFrameHost.exe」となり、ウィンドウタイトルとの複合条件にしなければターゲットの判別ができませんでした。本バージョンからは「MicrosoftEdge.exe」といったアプリケーション固有の実行ファイル名を取得するようになったため、単一条件でのターゲット登録が可能です。
※ 既存のターゲットで「ApplicationFrameHost.exe」を実行ファイル名の条件としている場合は、設定の修正が必要です。
Ver. 1.35の主な変更内容
ジェスチャーの入力後、マウスボタンを放したときにマウス操作に応じた本来の動作を実行します。
例えば右ボタンのリリースをトリガとしたジェスチャーが発動した場合、右ボタンを放したときにコンテキストメニューは表示されませんが、この関数の呼び出し以降は表示されるようになります。
使い方としては、割り当てアクションの中にif文があり、所定の条件を満たしていないときには通常の操作とみなしてコンテキストメニューを表示させたいといった場合に、else側でこの関数を呼び出します。中央ボタンによるオートスクロールについても同様の使い方ができます。
ジェスチャーの入力後、マウスボタンを放したときにマウス操作に応じた本来の動作をキャンセルします。
例えば右ボタンの押し下げ後にジェスチャーが発動しなかった場合、右ボタンを放したときにはコンテキストメニューが表示されますが、この関数の呼び出し以降は表示されなくなります。
使い方としては「MG_Timer()関数を利用して、後続のジェスチャーが発動しなかったことを条件に所定の処理を遅延実行する」というアクションを、右ボタン+カーソル移動のジェスチャーに割り当てるようなケースです。
この場合アクションが遅延実行される前にコンテキストメニューが表示されますが、ジェスチャー入力直後の処理でこの関数を呼び出すことによって防止できます。ただし認識設定の「未定義ジェスチャーの入力後に本来のマウス操作を再現しない」を有効設定にしている場合は必要はありません。
旧バージョンのアクションには、パラメータ指定なしのMG_ActivatePrevWin()関数呼び出しが記述されています。これを MG_ActivatePrevWin(1000) に書き換えると、1秒以内に同じ操作を繰り返すことで以前のアクティブウィンドウが次々とアクティブ化されるようになります。
Windows Aeroが適用された環境でアクション「ウィンドウの位置とサイズを変更」を実行した場合、指定した値よりも若干小さなウィンドウサイズになりますが、本オプションを指定することでこの問題が解消されます。
ボタンリストを右クリックして表示されるコンテキストメニューから、既存ボタンの編集を選択できます。
なおユーザー定義ボタンの保存先はConfigフォルダー配下のUserButtonsに変更さています。標準ボタンの定義をオーバライドした場合もこちらへ保存されるため、オリジナルのモジュールが上書きされる心配はありません。この変更により、Configフォルダーをコピーするだけで全ての構成をバックアップできるようになりました。(プラグインは除く)
Ver. 1.32の主な変更内容
Windowsのディスプレイ設定で100%を超える表示スケールが指定された環境において、ナビや設定画面が正しく表示されるよう修正されています。
ただしAutoHotkeyがPer-Monitor DPIに対応していないため、マルチモニター環境でプライマリモニターとは異なる表示スケールが設定されたモニター上では、カーソル座標に関連した不具合が発生します。
これを回避するには、以下の手順でAutoHotkeyに対する高DPI設定を変更する必要があります。
上記の設定変更によりサブモニター上でのジェスチャー機能は正常動作するようになりますが、設定画面等のダイアログBOXをサブモニターへ移動した際に、表示スケールに応じたウィンドウサイズの自動調節が行われなくなります。 この設定はAutoHotkey用に作成されたMouseGestureL以外のスクリプトにも影響するため、ご自身の利用状況を考慮して設定変更を行うかどうかを判断してください。
アクションテンプレートの「直前のアクティブウィンドウを復元」に含まれる関数 MG_ActivatePrevWin() を呼び出した際に、アクティブ化させたくないウィンドウを登録することができます。
Ver. 1.31の主な変更内容
オリジナルのMouseGesture.ahkから引き継いできた独特の設定構成を一新し、一般的なジェスチャーソフトに近く、より直感的に設定しやすいインターフェースへ変更しました。
ターゲットの優先順位は「ジェスチャー」タブ内で変更できるようになっています。
ターゲット名は大文字と小文字が区別されるようになっています。
またターゲットを選択した状態でF2キーを押すと、エクスプローラーのようにターゲット名を直接変更できるようになりました。
内部処理の変更により、ユーザー名とパスワードの設定は不要になりました。
AutoHotkey配布サイトの仕様変更で直接ダウンロードのリンクが無くなったため、Radial Menuと同様にAutoHotkeyの実行ファイルを同梱し、スタンドアローンパッケージとしました。
これに合わせてSetup.vbsも修正されています。
またMouseGestureL.ahkのアプリケーションアイコンも新規に添付しました。
Ver. 1.30の主な変更内容
1ページ目はターゲット、ジェスチャー、アクションの関係を俯瞰できるメインタブとし、ターゲット、ジェスチャーの具体内容をそれぞれのタブで設定する構成としました。
アイコンのパス名は、入力補助によるターゲット情報の取得時に自動入力されますが、「アイコン適用」ボタンを押すまでは適用されません。
他の設定項目と異なり、設定画面のOKボタンを押しただけでは適用されないので注意してください。
ターゲットリストのコンテキストメニューから「サブターゲットを追加」を選択することにより、選択中のターゲットにサブターゲットを追加できます。
サブターゲットは親ターゲットの条件と、サブターゲット自身の条件の両方を満たした場合にターゲットとして認識されます。また「親ターゲットの条件を継承しない」にチェックを入れることで、親ターゲットの条件を無視することもできます。
本機能は以下の点に注意してご利用ください。
【親ターゲットの条件を継承する場合】
Chrome (Exe=chrome.exe)
│
└ タイトルバー (Custom=MG_CursorInRect(0,0,0,20))
上の例で「タイトルバー」はChromeのタイトルバー領域をターゲットとして認識しますが、ターゲットとしての優先順位はユーザーの設定に依存します。
従って「Chrome」と「タイトルバー」の同じジェスチャーに別々のアクションを割り当てた場合、「タイトルバー」の割り当てアクションをリストの上位へ配置しないと、タイトルバー上でジェスチャー操作を行っても「Chrome」の割り当てアクションが発動します。
【親ターゲットの条件を継承しない場合】
タブ切替え (Custom=MG_CursorInRect(0,0,0,20)
│ and Include=タブ切替え/対象アプリ)
└ 対象アプリ (Exe=chrome.exe
or WClass=MozillaWindowClass)
上の例は、親ターゲットにジェスチャーを割り当てて、サブターゲットはジェスチャーの対象としたいアプリケーションを登録する入れ物としてだけに使うパターンです。このケースでは「親ターゲットの条件を継承しない」にチェックを入れておく必要があります。
この例のような使い方であれば、本来はサブターゲット化する必要もないのですが、Includeしているターゲットを配下へ置くことで、視覚的に分かりやすく管理できるというメリットがあります。
Ctrl+数字 | : | 対象番号のタブへ切り替える (1:メイン、2:ターゲット、3:ジェスチャー、・・・) |
Ctrl+G | : | 選択中のターゲットへ割り当てられているジェスチャーの一覧をメニュー表示 |
Ctrl+↓ | : | 選択中のターゲットへ割り当てられている次のジェスチャーを選択 |
Ctrl+↑ | : | 選択中のターゲットへ割り当てられている前のジェスチャーを選択 |
Ctrl+E | : | アクションスクリプトをエディタで編集 |
Ctrl+F | : | サブターゲットの表示/非表示を切り替える |
F1 | : | ヘルプを表示 |
「A_ProgramFilesX86」の値は、64-bit環境では「C:\Program Files (x86)」となり、32-bit環境では「C:\Program Files」になります。
アイコンファイルのパス名、スクリプト編集用エディタのパス名、またはプログラムを起動するアクションで指定するパス名に %A_ProgramFilesX86% を含めると、その部分が前述の条件に従って実際のフォルダーパス名へ置き換わるので、複数の異なる環境で設定ファイルを共有する場合に利用できます。
なお、AutoHotkey標準の組み込み変数である「A_ProgramFiles」や「A_WinDir」なども同様に利用できます。またアイコンに関しては、アイコンライブラリファイルなどを作成して「A_ScriptDir」からの相対パスで指定し、設定ファイルと一緒に管理するという方法もあります。
既にMG_User.ahkを利用している場合は、先頭へ以下の3行を追加してください。
if (MG_IsEdit) {
Goto, MG_User_End
}
なお既存のMG_User.ahkでMouseGestureL.ahk内の関数やサブルーチンを呼び出している場合、MG_Edit.ahkの起動時にエラーとなりますが、以下のような変更で対処可能です。
【関数】
MG_Move()
↓
Func("MG_Move").()
【サブルーチン】
Gosub, MG_OpenPluginsFolder
↓
Gosub, % "MG_OpenPluginsFolder"
MG_User.ahkのMG_Edit.ahk用初期化処理内で、以下の数値を変更すると各種リストのサイズを変更できます。
ME_ListH | := 460 | ; 各ページのリストの高さ |
ME_TListW1 | := 180 | ; [P.1] ターゲットリストの横幅 |
ME_GListW1 | := 150 | ; [P.1] ジェスチャーリストの横幅 |
ME_AListW | := 300 | ; [P.1] アクションリストの横幅 |
ME_AListH | := 215 | ; [P.1] アクションリストの高さ |
ME_AListR | := 50 | ; [P.1] アクションリストのターゲット列幅の比率(%) |
ME_TListW2 | := 200 | ; [P.2] ターゲットリストの横幅 |
ME_GListW2 | := 200 | ; [P.3] ジェスチャーリストの横幅 |
ME_ListPad | := 8 | ; 各ページのリストの横間隔 |
設定済みのユーザー名とパスワードは文字化けしているので、設定し直してください。
なお、MG_User.ahkの共通初期化処理に以下のような行を追加しておくと、少しだけ安全になります。
MG_EncKey := "KU9z759*YmbuV%rD^2tgnbH%9VuNZEx・・・" ; ← 適当な文字の羅列
リスト選択時の挙動が変わっていますが、バグではありません。
既存のアクションを元にした新規アクション割り当ての追加や、ターゲット間での条件定義のコピーを楽にするための仕様変更です。
ただしジェスチャーパターンのリストだけは、選択と同時にジェスチャーの矢印表記が見られるよう、先頭パターンが初期選択されるようになっています。
Ver. 1.20の主な変更内容
操作ログを表示しておけば、ジェスチャーが思うように認識されなかったり、意図と異なるアクションが発動した時などに、ジェスチャーがどう認識されたのかを確認することができます。
ログを見ていると、縦または横方向の移動距離が、「認識設定」の「ジェスチャーの入力とみなされるカーソル移動量」に満たなくても、1ストロークとして認識されていることに気付くと思います。
これは、4方向モードであっても直線距離のカーソル移動量がストロークの判定対象となっているためで、バグではありません。
以下の設定をインポートすると、エクスプローラーおよびデスクトップのアイコン上では右ボタン始動のジェスチャーが無効化され、即座に右ドラッグができるようになります。
[Explorer]
WClass=CabinetWClass
WClass=ExploreWClass
WClass=Progman
WClass=WorkerW
[Explorerのアイコン]
And=1
Include=Explorer
Custom=MG_TreeListHitTest()
[RB_]
G=RB_
Explorerのアイコン=MG_Abort()
上記の設定に使用されている関数「MG_TreeListHitTest()」は2個のパラメータを受け取ります。
1つ目はリストビュー、2つ目はツリービュー(それぞれエクスプローラーの右ペインと左ペイン)に対応しており、1を指定するとテキストラベル上でもジェスチャーが無効化され、0の場合はアイコン上のみで無効化されます。(未指定の場合は「MG_TreeListHitTest(1,1)」と同じ)
既存項目と重複する設定のインポートができるようになったため、「C」ボタン →「クリップボードからインポート」ボタンを順に押すことで、既存項目の複製ができるようになりました。
項目を複製した後は、内容が重複しないよう一方の項目を修正してください。登録内容が重複したまま設定を適用した場合、リストの下位にある項目は無視されます。
Ver. 1.19の主な変更内容
設定画面では「更新」ボタンを押さなくても、記述内容が自動保存されるようになりました。以前の操作に慣れていると、破棄したつもりの内容が設定に反映されてしまう可能性もあり、注意が必要です。
ターゲット、ジェスチャーおよびアクションスクリプトの各入力欄は、空欄になっていると自動保存の対象にならないため、間違えたと思ったら右側の「×」ボタンを押して編集内容をクリアしてから、一旦他のアイテムを選択すれば自動保存を回避できます。
逆に何もしないアクションを登録したい場合には、空欄にした後で明示的に「更新」ボタンを押す必要があります。
また誤ってOKボタンを押してしまった場合は、直前の設定が「Config」フォルダー内に「MouseGestureL.ini.bak」というファイル名で保存されているので、これを「MouseGestureL.ini」にリネームしてからメニューの再起動を実行してください。
Windows Vista以降で、管理者の権限で実行されているプログラムをマウスジェスチャーで操作するためには、MouseGestureL.ahk自身を管理者の権限で起動する必要があります。本バージョンより、設定画面からMouseGestureL.ahkをスタートアップへ登録できるようになりましたが、その際に管理者権限での起動を選択できます。
ただしMouseGestureL.ahkを管理者権限で起動した場合、割り当てアクションから起動したアプリケーションも管理者権限になるため、不都合が生じる場合もあります。
これを回避するには「その他」タブにある「プログラム起動用のユーザー情報」にログインユーザー名とパスワードを設定しておき、アクションテンプレートから「プログラムを起動」を追加すれば、プログラムを一般ユーザーの権限で起動するアクションが登録できます。
また上記で設定したユーザー名とパスワードは、「スクリプトの編集に使用するエディタ」を起動する際にも参照され、指定のエディタを一般ユーザー権限で起動することができます。