imani-cの日記

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

AutoHotKey導入

LGSから逃れたい

私は、LogitechのG300というゲーミングマウスを使っています。別にゲーム好きというわけではないのですが、たくさんのボタンにショートカットを設定できるので、プログラミングなどいろんな用途に便利なのです。

しかし、どうにもLogicool Gaming Software(以下LGS)というソフトウェアがいまいちで、PCをスリープさせると確実にショートカットが利かなくなります。使用中に突然そうなることもあります。これはしょうがないかもしれませんが、仮想マシン上ではうまく使えません。

LGSの代わりになるものがないかとWeb上で調べてみると、AutoHotKey(以下AHK)なるものの評判がいいようです。ざっとググってみると、このサイトがヒットします。それによると、2017年ころから更新が止まっているように見えます。全然保守されていないみたいだけど大丈夫なのか、このソフト?

よく調べると、実はそんなことはなくて、現在までちゃんと保守されていました。それどころか、つい最近、バージョン2が出ています。どうやら、保守されていないのは上記のWikiの方だったようです。AHKの本家サイトはこちら

バージョン2は、スクリプトの文法を改善して、わかりやすくなったようです。Web上にはバージョン1の情報があふれていますが、どうせならきれいなスクリプトを書きたいと、バージョン2を導入することにしました。

これでLGSから逃れられるはず。

AHKって何?

AHKについて解説しているサイトがWeb上に多くありますので、ここでは手短に。

  • AHKは、キーボードやマウスとWindowsの間に割り込んで、Windowsが入力を処理する前に入力を加工したり、何か別のことをしたりするプログラムです。
  • AHKは、Windowsから横取りする入力を指定したり、それに対する処理を指定するために、独自のスクリプトを使います。ユーザーは、そのスクリプトを自由に記述できます。

この二つの機能により、以下のようなことができます。

  • 任意のキーやキーの組み合わせをホットキーとして、ブラウザを立ち上げたり音声ボリュームを調整するなどの動作をさせられます。
  • ホットキーにマウスの移動やクリックなどの操作を割り当てられます。
  • マウスボタンをホットキーとすることもできます。
  • 指定したキーをほかのキーとすり替えることができます。
    • 例えば、CapsLockキーとCtrlキーを入れ替えるとか。
  • 押されているシフトキー・Altキーなどの修飾キーによりマウスボタンやホイールの機能を変化させられます( Ctrlを押しながらホイールを回したらページアップさせるとか)。

ダウンロード

AHKは、以下のサイトからダウンロードできます。

AHKのドキュメントは、以下のWebページにあります。上記サイトからも辿れます。

インストール

インストーラによるインストール

上記のサイトからインストーラをダウンロードすれば簡単にインストールできます。とても簡単で、何も説明することがありません。

ZIPによるインストール

インストーラでインストールした後気づいたのですが、慣れている人はインストーラではなくZIPを使ってインストールするほうがやりやすいかもしれません。理由は、AHKをコマンドパラメータなしで起動すると、AHKの実行ファイルが置いてあるフォルダ内からデフォルトスクリプトを探して実行してくれるからです。

  • 32ビット版 AutoHotKey32.exeを実行するなら、AutoHotKey32.ahkがデフォルトスクリプト
  • 64ビット版 AutoHotKey64.exeを実行するなら、AutoHotKey64.ahkがデフォルトスクリプト

インストーラでインストールすると、Program Folderフォルダに実行ファイルが置かれますので、デフォルトスクリプトを編集しても保存できなかったりして苦労します。できれば、こちらの方法、つまり、ZIPファイルを任意のフォルダに展開する形でインストールするほうが良いのでしょうね。

Logicool G300の設定

AHKをインストールしたらすぐにLGSを外せるかというと、それはできません。G300など拡張ボタンを持つマウスが送ってくるデータは、拡張ボタンを扱う部分が標準とは異なっているので、AHKではその部分を解釈できないからです。

そこで、拡張ボタンを押したときにAHKが理解できるデータを送るようにG300を設定しなければなりません。

幸いWindowsは、ファンクションキーを24番まで扱えます。AHKも同様です。たいていのキーボードにはF13以降のキーがありませんから、G300の拡張ボタンを押したときにF13以降のキーコードを送るようにすればAHKで扱えます。

G300は、LGSを使ってボタンやいろいろな機能を割り当てていますが、LGSを使わずにマウス側でボタンの機能を変えることもできます。ここではLGSを排除するつもりなのですから、このマウス側の機能を使って拡張ボタンにファンクションキーを割り当てることにします。

まず、LGSでG300のオンボードメモリを使うように設定しましょう。

そして、ボタンの機能を設定するダイアログを使って、拡張ボタンにF13以降のファンクションキーを割り当てます。ただ、F13以降のキーがキーボードにないので入力しようがなくて、このままでは設定できません。

F1以降を入力できるようにする

ここで、キーボードからF13以降のキーを入力できるようにAHKを利用します。以下のスクリプトを拡張子を「.ahk」にした適当なプレーンテキストファイルに書いてください。

#Requires AutoHotkey v2.0

F1::
{
    Sleep 1000      ; 1秒待つ。
    Send "{F13}"    ; F13キーのキーコードを送る。
}

F2::
{
    Sleep 1000      ; 1秒待つ。
    Send "{F14"}    ; F14キーのキーコードを送る。
}

... 以下必要なだけ繰り返す

このスクリプトAHKで実行すると、F1キーを押すと1秒後にF13キーが、F2キーを押すと1秒後にF14キーが押されたことになります。

実行するには、このファイルをAHKの実行ファイルにドラッグアンドドロップしましょう。拡張子.ahkAHKの実行ファイルに結び付けてダブルクリックしてもよいです。

これで、F13以降のキーを入力できるようになりました。

G300を設定する

上記スクリプトでは、キー押下後1秒たってからキーコードを送るようになっています。これは、LGSのコマンドエディタのダイアログがキー入力をフックしてしまうことへの回避策です。

LGSのコマンドエディタは、キーボードフォーカスを持っている間キー入力をフックして、それを後段の入力処理に渡さないようです。そのため、AHKに設定したキーコード変換が働かず、F1を押すと、F1がそのまま入力されてしまいます。

そこで、LGSのコマンドエディタ以外にキーボードフォーカスを当てた状態でF1キーを押し、1秒以内ににコマンドエディタにキーボードフォーカスを移すことにより、この問題を回避します。

手順は、以下のような感じ。

  1. LGSで、F13を割り当てたい拡張ボタンからコマンドエディタを開く。
  2. キーコード入力用のテキストボックスをクリックする。
  3. マウスを使ってコマンドエディタ以外のウィンドウにフォーカスを移す。
  4. F1キーを押す。
  5. 素早くAlt-Tabでコマンドエディタにフォーカスを移す。
  6. おわり。

この手順により、コマンドエディタでF13キーを割り当てられます。あとは、ほかの拡張ボタンについても同じ手順を繰り返せばOKです。

なお、コマンドエディタの画面は、下図のようになっています。内側の赤い四角の場所がキーコード入力用のテキストボックスです。

ちなみに、私のG300には下図のように割り当てています。ホイールボタンがモードスイッチになっているのは、Logitechがモードスイッチなしを許してくれないし、ホイールボタンが硬くて、いい加減に押すとホイールを少し回してしまったりするからです。

ここまで出来たら、もうLGSは終了させてOKです。ついでにスタートアップからも外しましょう。

F13キーなどを入力するAHKも不要ですから、タスクトレイアイコンのAHKを右クリックして終了させましょう。

基本スクリプト作成

AHKでは、複数のスクリプトを実行することができます。いろいろなソフト向けのスクリプトを一つのファイルにまとめると修正が大変になりますから、ソフト毎やアプリのジャンル毎に別のスクリプトにするとよいでしょう。

まずは、一番基本的なキー変換をしてくれるスクリプトを作ります。

私はダブルクリックが苦手なので、右側手前の拡張ボタンにダブルクリックを割り当てています。すべてのソフトでこの設定を使いたいので、基本スクリプトにこれを入れ込みます。ファイル名を「DefaultG300.ahk」としました。

#Requires AutoHotkey v2.0
#SingleInstance Force

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

G300の右側手前拡張ボタンに割り当てたF16キーが入力されたら、ダブルクリックを送るようにしました。

ファイルDefaultG300.ahkAHKに食わせてみると、その拡張ボタンを押したときにちゃんとダブルクリックが入ります。うん、これは便利。仮想マシン上でもやってみましたが、正しく動きました。サスペンドリジューム後の動作もOKです。

スタートアップに登録

これをスタートアップに登録すれば、ログイン時に自動的に起動してくれます。

つい忘れがちなスタートアップフォルダの場所は以下。

  • C:\Users\ユーザー名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

この中に、AHKの実行ファイルへのショートカットを作り、引数としてDefaultG300.ahkを与えれば出来上がりです。

インストーラでインストールした場合には、こんな感じのショートカットを作ります。

「リンク先(T):」欄がはみ出していますが、中身は以下のとおりです。

"C:\Program Files\AutoHotkey\v2\AutoHotkey.exe" "C:\ProgramData\AutoHotKey\DefaultG300.ahk"

これで、PCを起動するだけでAHKがマウスの拡張ボタンをダブルクリックに変換してくれるようになりました。

次の記事で、Google Chromeで横着しながらブラウジングができるスクリプトを作ります。

著作権:当記事の画像は、大体LogitechLogicool Gaming Softwareの画面をキャプチャして引用したものです。