AutoHotKeyのスクリプト例

AutoHotKeyで使った構文やスクリプトの例を書いておく。

スクリプト作成時の注意

基本的なことは、公式ドキュメントのチュートリアルを読む。たぶん機械翻訳とかでも十分わかる:

Beginner Tutorial | AutoHotkey
Learn how to download and install AutoHotkey, to create a script, to use hotkeys and hotstrings, to send keystrokes, to run programs, etc.

機械翻訳はdeeplがおすすめ:

DeepL Translate: The world's most accurate translator
See why millions translate with DeepL every day. Fast, accurate, and secure – translate texts and full document files instantly. Currently supported languages a...

その他の注意事項も記しておく:

  • AutoHotKeyのバージョンは1.1以降
  • ファイルのエンコードはUTF-8(BOMつき)にしておく。(BOMなしでも動いてたけど念のため)

スクリプト例

先にスクリプトを載せて、そのあとに解説を入れておく。バグチェックは面倒だがMsgBoxを使って変数の確認などしている。

特定ソフトがアクティブの時だけ、指定フォルダからランダムにテキストファイルをそのソフトで開く

Ctrl+zで動作を行うとする。特定ソフトがアクティブでないなら、普通通りの振る舞い(アンドゥなど)をする。

$^z::
    ; <Some_App>.exeがアクティブウィンドウ時のみ
    if WinActive("ahk_exe <Some_App>.exe")
    {
        ;ファイルパス取得
        basedir := "C:\some\folder\"
        file_array := []
        globStr := Format("{:s}*.txt", basedir)
        Loop, Files, %globStr%
        {
            filepath := StrReplace(A_LoopFileLongPath, A_Space, "` ")
            file_array.Push(filepath)
        }
        Random, rIndex, 1, file_array.Length()
        value := file_array[rIndex]
        Run C:\some\folder2\<Some_App>.exe "%value%"
    }
    else
    {
        ; 該当しないときはいつものふるまい
        send, ^z
    }
    return

ifWinActiveで特定のアプリの起動中などをチェックできる。起動中でないときは、デフォルトの振る舞いをさせる。デフォルトの動作をさせるには、$^zのようにホットキーで$をつけないと、sendでループに陥ってしまうので注意する。

Pythonでいうstrの変数は、aVariable := "this is a variable"で作成できる。

AutoHotKeyArrayもサポートしていて、file_array := []で空の配列が作成できる。配列は添え字が1から始まる。詳細は次のリンクを参照のこと:

Objects - Definition & Usage | AutoHotkey
Learn details about basic usage of objects, extended usage of objects, custom objects, default base object and implementation of objects.

文字列の連結は、.でもできるが、今回は、Format(formatString, values...)で行なった。文字列を埋め込むなら、{:s}を指定しておけばいい。詳細:

Format() - Syntax & Usage | AutoHotkey
The Format function formats a variable number of input values according to a format string.

Loop, Files, <filePattern> { expressions }globのようなファイルの探索ができる。ここではファイルパターンとして、C:\some\folder\*.txtを指定して、フォルダC:\some\folder\の中にあるテキストファイルを探す。 Loopブロックの中では、各ファイルについての処理を行うことができる。ファイルの情報は、A_LoopFileLongPathなどを参照できる。他の情報の取得については次を参照のこと:

Loop (files & folders) - Syntax & Usage | AutoHotkey
The Loop Files statement retrieves the specified files or folders, one at a time.

ループの中では、あとでランダムに選ぶために、配列へファイルパスを追加(Push)している。ここでの注意点として、ファイルパスにスペースが混じっていると追加を行えず、エラーを起こしてしまう。そのため、StrReplaceを使ってスペースをバッククォートでエスケープしている。(ちなみに全角スペースは試していないが半角スペースが問題だと思うので普通に動くはず…) StrReplace("some string", A_Space, "` ")を使うと、some` stringとなり、AutoHotKeyがエスケープしてくれるようになる。

ループを抜けたら、Randomを使ってランダムなインデックスrIndexを生成する。 Random, <var1>, min, maxを使って、変数var1[min, max]の範囲(min,max含む)でランダムな値を代入できる。

生成したランダムなインデックスを使って、用意したファイルパスの配列からパスを1つ取り出す。 そして、Runでプログラムに、パスを引数として渡す。

最後のRunでは、多重起動を防ぐようにはしていないので、ソフトが多重起動できるようになっていれば、新しいウィンドウが開くと思う。今回使ったソフトは多重起動しないので、そのまま開いているウィンドウでパスを扱うことができた。

ホットキーでしたいことが終わったら、returnでホットキーを抜ける。

説明おわり。

今後使ったものは追加していきたい。

以上です。

タイトルとURLをコピーしました