AutoHotKey

ホットストリングとは?AutoHotKeyのホットストリングについて解説

autohotkeyで右矢印キー > 左矢印キー > 右矢印キーのコマンドである動作をする、ということをしたかったのですが、それをやろうとしてまっさきにうかんだホットストリングではそれができないことが判明しました。ホットストリングは割と複雑です。

最近autohotkeyにまた熱が入っていてきて、割と便利に使わせてもらっているのですが、コマンドが増えてくると、アプリ上で競合が起こってしまうことがあります。
例えば僕はよくADVゲームをやるのですが、ゲームプレイ中にctrlキーを押すと、だいたい悲惨なことになります。( 強制スキップとか )
ctrl-space-Eでatomを開こう、なんていつものくせでやってしまうと大変です。

そこで考えられた対策が、ウィンドウのフォーカスを外してやる、というもの。

How to make window lose focus – Ask for Help – AutoHotkey Community

WinActivate, Program Manager

あとはこれをどうやって発火させるかが問題なわけですが、上記の理由の通り、下手なコマンドは使えません。それでいて、限りなく素早く実行できるものであるべきであるわけですね。
某テキストエディタのようなiiなんかは汎用性が悪いですし、そういうことを考慮した結果、矢印キーが最適であろう、と。

じゃあ以下でいけるんじゃね、と試してみました。

:*:{right}{left}{right}::

うーん。動かない。

そして、ホットストリングについて少し調べてみました。

。。。

うーん。

どうやら、autohotkeyのホットストリングでは矢印キーをトリガーとして使うことはできないようです。

他にもこれをやろうとした人が多くいるようですが、ホットストリングでの実装はできない模様。

is it possible to use arrow keys and other in a hotstring? – Ask for Help – AutoHotkey Community
Detecting, ‘catching’ arrow keys with hotstring etc.? – Ask for Help – AutoHotkey Community
How to bond hotstring to direction keys? – AutoHotkey Community

ここで一応、軽くホットストリングについてまとめてみます。

以下がホットストリングの基本スタイル。ホットストリングはエンドキーというホットストリングのトリガーを終了するトリガーを押さないと終了しないようにデフォルトでなっています。

::fuga::

エンドキーはデフォルトではenterとかspaceとかです。エンドキーの変更の例は以下。

#Hotstring EndChars -()[]{}:;'"/\,.?!`n `t
; or
Hotstring("EndChars", "-()[]{}:;")

Hotstrings – Definition & Usage | AutoHotkey

エンドキーいらないよーという場合は:*:にします。*のアスタリスクの部分がオプションと呼ばれる部分で、アスタリスクはエンドキーを使用しないことを意味するオプションです。

:*:fuga::

矢印キー使えないなら、spaceとかtabも使えないのか、というと、そこらへんは使えるようです。タブは`tで表現し、enterは`n、スペースは文字通りスペースで、といった具合。

例えば以下のようにtab3回連続をトリガーにするということができます。

:*:`t`t`t::

  WinActivate, Program Manager

return

はい。
とりあえず矢印キーの件は他の代案を探すのがよさげです。

蛇足

とりあえず以下で落ち着きました。マウスを使うというのは想定していなかった。ソフトウェアに合わせて、候補のうちどれか適切なものを使ってトリガーできるところがポイントです。

#If GetKeyState("XButton1") || GetKeyState("XButton2") || GetKeyState("RButton")

  d::

    WinActivate, Program Manager
    ; log("XButton2")

  return

#If

やはりautohotkeyは便利ですねぇ。国内ではahkはブロガーを中心にそれなりに有名みたいですが、その良さを深くまで知っている人は少ないんじゃないでしょうか。ahkは僕がいっちばんはじめに手を付けたプログラミング言語でもあるので、もっと人気になってほしいところですね。