imani-cの日記

WPFスタイルとテンプレートの本をAmazonで出しました。ちょっととっつきにくいこれらについて知りたいお方は、覗いてみてください。「WPF スタイル」で検索すると、トップに出ます。gRPCの本もあります。「gRPC入門」で検索するとすぐ見つかります。

AutoHotKey : Google Chrome専用スクリプト

前回の記事では、マウスの拡張キーでダブルクリックするだけのAHKスクリプトを作りました。 今回は、Webブラウジングを楽ちんにするために、Google Chrome専用のAHKスクリプトを作ります。

目標は、マウスをあまり動かさずに済み、キーボードもシフトキー辺りに手を置いたままにできることです。

仕様

自分の使い方で「横着できたらいいなー」と思っているものをホットキー(マウスのホットボタン?)に登録します。

以下のような仕様にします。

  • Chrome以外の動作に影響を与えない。
  • 拡張ボタンでタブを閉じる。
  • 「進む・戻る」の拡張ボタンでタブを切り替える。
  • ホイールにPgUpとPgDnボタンの代わりをさせる。

実装

G300でChromeを使うためのスクリプトなので、「ChromeG300.ahk」という名前にします。

Chromeの時だけ有効なホットキーを作る

AHKには、「#HotIf expression」という便利なディレクティブがあります。ドキュメントはこちら

キー入力などのイベントが発生した時にexpressionを評価して、結果が真の時だけ#HotIfより下のホットキーなどが有効になるという機能です。

ここでは、Chromeが入力を受け取るときだけ有効なホットキーなどを作りたいのですから、以下のような式を使うことにします。

#HotIf WinActive("ahk_exe chrome.exe") 

AHKの組み込み関数WinActiveを使って、Chromeがアクティブか否かを調べています。この関数は、指定されたウィンドウがアクティブな時そのHWNDを返し、それ以外の時に0を返します。

引数にはいろいろな指定ができます。ここでは実行ファイル名を与えていますが、タイトル文字列やウィンドウに含まれる文字列なども指定できます。上記のように引数に「ahk_exe chrome.exe」を与えると、chrome.exeという実行ファイルが表示したウィンドウがアクティブかどうかを調べます。指定方法のドキュメントはここにあります。ここで利用したahk_exeは、アプリを特定するには便利です。

ahk_exeで指定する実行ファイル名は、AHKが提供する「Window Spy」で調べることができます。これを起動するには、タスクトレイアイコンのコンテキストメニューを使うのが簡単です。

WindowSpy起動

Window Spyを起動すると、以下の画面が表示されます。マウスカーソルがある位置に表示されているウィンドウの情報が表示されます。この中からahk_exeをコピペすればOKです。

WindowSpyでExeを調べる

右上にある「Follow Mouse」にチェックを付けているとマウスを動かすだけで情報が変わってしまい、表示されている情報を選択しにくいかもしれません。ます。そのような時には、このチェックを外しましょう。マウスをクリックした時だけ情報が更新され、扱いやすくなります。

拡張ボタンでタブを閉じる機能を実装

LogitechマウスG300の右側奥にある拡張ボタンでタブを閉じるようにします。

このキーには前回の記事でファンクションキーF15を割り当ててありますから、ここではF15キーが押されたらタブを閉じるようにすればよいのです。

#HotIf WinActive("ahk_exe chrome.exe") 
F15::Send "^w"    ;; F15 key (右奥拡張ボタン)が押されたら'Ctrl+w'キーを送る。

F15キーが押されたときに「WinActive("ahk_exe chrome.exe") 」が評価され、その値が真の時だけ「#HotIf」以降に書いてあるホットキーなどが有効になります。

それ以外の場合、このスクリプトはF15キー入力を処理しませんので、Chrome以外のソフトにはF15がそのまま渡されることになります。

送るときのキー指定方法

「Ctrl-w」を送るとき、キーコードに「^」を付けています。このような記号をキー名の前に置くことにより、Ctrl・Shift・Alt・Winという修飾キーを付けて送ることができます。その一覧はこちら

通常の文字なら上記のように「w」などと書けばキーを指定できますが、矢印キーのような特殊なキーの場合にはここにある一覧で決められた名前を使う必要があります。

ホットキーを指定するためのキー指定方法

上記コードの先頭には、ホットキーを指定するためのキーコードが指定されています。ここにはキーボードのキーだけではなく、マウスのボタンやホイールも指定できます。また、送るときと同様に、「^」などを前置することにより修飾キーを指定することもできます。

ほかの機能も実装

同じ内容の繰り返しなので、説明不要でしょう。 ChromeG300.ahkの全コードを掲げます。

#Requires AutoHotkey v2.0
#SingleInstance Force

;------------------- Chrome用ホットキー定義
#HotIf WinActive("ahk_exe chrome.exe") 
F15::Send "^w"          ; F15 key (右奥拡張ボタン)で、'Ctrl+w'キーを送る。
+WheelDown::Send "{PgDn}"   ; Shift+ホイールアップで、ページアップ
+WheelUp::Send "{PgUp}"     ; Shift+ホイールダウンで、ページダウン
+XButton1::Send "^{PgUp}"   ; Shift-戻るボタンで、前のタブ
+XButton2::Send "^{PgDn}"   ; Shift-進むボタンで、次のタブ

基本スクリプトから読み込む

PC起動中はいつでもChromeを使う可能性がありますし、実際しょっちゅう使います。ですから、ここで作ったスクリプトをデフォルトスクリプトに混ぜてしまってもよいのですが、保守を考えると、やはり別のスクリプトにしておきたいところです。でも、いちいち手動で起動するのは嫌だし、スタートアップにいくつもAHKを登録するのも嫌です。

ですから、デフォルトスクリプトからChrome用のスクリプトを読み込むことにします。

方法は簡単で、以下の1行をデフォルトスクリプトの最後に追加するだけです。

追加後のデフォルトスクリプトは、こうなります。

#Requires AutoHotkey v2.0
#SingleInstance Force

F16::           ; F16 key (right extended button in front)
{
    MouseClick "Left",,,2
}

#include "C:\ProgramData\AutoHotKey\ChromeG300.ahk"

このようにすれば、ChromeG300.ahkで定義したスクリプトををDefaultG300.ahkに取り込んでくれます。

上記のコードでChromeG300.ahkをフルパスで指定しているのは、実行ファイルと異なるフォルダにスクリプトを置いているからです。同じフォルダに置くならパスを指定する必要はありません。