AutoHotKey
で使った構文やスクリプトの例を書いておく。
スクリプト作成時の注意
基本的なことは、公式ドキュメントのチュートリアルを読む。たぶん機械翻訳とかでも十分わかる:
機械翻訳はdeepl
がおすすめ:
その他の注意事項も記しておく:
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
if
とWinActive
で特定のアプリの起動中などをチェックできる。起動中でないときは、デフォルトの振る舞いをさせる。デフォルトの動作をさせるには、$^z
のようにホットキーで$
をつけないと、send
でループに陥ってしまうので注意する。
Python
でいうstr
の変数は、aVariable := "this is a variable"
で作成できる。
AutoHotKey
はArray
もサポートしていて、file_array := []
で空の配列が作成できる。配列は添え字が1から始まる。詳細は次のリンクを参照のこと:
文字列の連結は、.
でもできるが、今回は、Format(formatString, values...)
で行なった。文字列を埋め込むなら、{:s}
を指定しておけばいい。詳細:
Loop, Files, <filePattern> { expressions }
でglob
のようなファイルの探索ができる。ここではファイルパターンとして、C:\some\folder\*.txt
を指定して、フォルダC:\some\folder\
の中にあるテキストファイルを探す。
Loop
ブロックの中では、各ファイルについての処理を行うことができる。ファイルの情報は、A_LoopFileLongPath
などを参照できる。他の情報の取得については次を参照のこと:
ループの中では、あとでランダムに選ぶために、配列へファイルパスを追加(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
でホットキーを抜ける。
説明おわり。
キーひとつでスクリーンショットを保存する
2022/2追記
Win+Shift+S
でスクショが撮れることは知っていたがその後手動で保存先を指定して保存しないといけないのが面倒なため、AutoHotKey
で保存までできるようにする。
Win+Shift+S
でなくとも、Win+PrintScreen
でピクチャフォルダにスクリーンショットが保存される。また、これはサブディスプレイなどを連結して全体で1枚の画像にして保存するもの。
アクティブなウィンドウだけを保存するショートカットキーもある。Win+Alt+PrintScreen
でできる。これは先のものと違いピクチャフォルダに保存はされずに、ビデオフォルダに保存される。スクリーンショットというよりは、キャプチャのようでキャプチャというフォルダ内に保存される。WindowsのXbox Game Bar
の機能のようにも見える。XBox Game Bar
を無効化すると機能が利用できなかった。
;...
; 右ウィンドウズキーでアクティブウィンドウをスクショして保存(ビデオフォルダ)XboxGameBarを利用しているようでこれがオフだとスクショできない。
RWin::send #!{PrintScreen}
; 右Altと右ウィンドウズキーで画面全体をスクショして保存(ピクチャフォルダ)
>!RWin::send #{PrintScreen}
全体的に言えることだが、欠点としては、autohotkey
が効かないソフトがアクティブだと動作しない。残念。。
もう少し何とかなるといいのだが。
おわり
今後使ったものは追加していきたい。
以上です。
コメント