![見出し画像](https://assets.st-note.com/production/uploads/images/87843578/rectangle_large_type_2_8184ff9d2651650a958a2a968fb2d6e4.jpeg?width=1200)
【AutoHotkey】数字選択式の簡易ランチャーを作る
AutoHotkeyでは、アプリケーションの起動をキーに割り当てることができます。アプリケーション起動のコマンド(Run)がスクリプトに用意されているので、それをホットキーで実行するように書けば良いということです。
これは便利だと思い、最初は「Insert+Wで○○起動」みたいな形で個別にアプリケーションを割り当てていました。
しかし、調子に乗って数を増やすとどれに何を割り当てたのか覚えていられなくて、だんだん億劫になっていきました。
加えて、ホットキーとして登録できる数はそう多くないという問題もあります。キーの組み合わせとして可能なものはたくさんあっても、実際に同時に押しやすいキーの配置というのは限られているからです。他に登録したいコマンドも色々あります。
ということで、キーひとつにリストの形でまとめてしまい、その中から指定してアプリケーションを起動する格好にしようと考えました。
完成形を先に見せるとこんな感じのものです。
![](https://assets.st-note.com/img/1664359430898-TL1sAGU8Z4.png)
このためには、ダイアログにテキストを複数表示して選択するための関数を作る必要があります。
しかしその前に、その関数(SelectTextとします)をどう使うことになるのかの全体像を先に書いておくことにします。
Ins::Return ;Insertを無効化
Ins & A:: ;Insertキー+Aで実行
Description := "アプリケーションを起動します。`n" ;説明文を用意して変数Descriptionに入れる
Array := ["C:\Program Files\Git\git-cmd.exe" ;アプリケーションのアドレスを配列Arrayに入れる
,"C:\Program Files\Inkscape\bin\inkscape.exe"
,"C:\Program Files\nexusfont\nexusfont.exe"
,"C:\Program Files\Dropbox\Client\Dropbox.exe"
,"Notepad.exe"]
Address := SelectText(Array,Description) ;関数SelectTextにArrayとDescriptionを渡し、返ってきた値を変数Addressに入れる
Run, %Address% ;変数Addressに入っているアドレスからアプリケーションを起動する
Return
さて、関数SelectTextの中身に取り掛かります。必要なことは以下の4点です。
渡した配列を元にダイアログに表示するテキストを作る
テキストの長さに応じてダイアログボックスのサイズを変える
番号選択のダイアログボックス(InputBox)を用意し、入力が有効な値になるまでループさせる
選択したテキストを返す
SelectText(Array,Description){ ;テキストを入れた配列と説明文のテキストを渡す
text := ""
count := 0 ;何行作ったかの記録用変数
For index, element in Array ;配列の各要素について処理をする
{
text := text . A_Index . ":" . element . "`n"
count += 1 ;この部分は「count := A_Index」でも良いです
}
height := count * 18 + 170 ;ダイアログボックスのサイズを変更するためheightを計算
Loop {
InputBox, num,,%Description%番号を選択してください。`n`n%text%,,500,%height%
If ErrorLevel <> 0 ;キャンセルしたら処理中止
Return
If (num>0&&num<=count) ;選択肢に存在する番号を入力した場合のみループから抜けて次に進む
Break
}
Return Array[num] ;番号で選択したテキストを返す
}
途中の変数countについては、処理の度に1を足すやり方でも、毎回A_Index(=現在繰り返しの何回目か)を代入して最新のindex番号が反映されるやり方でも結果は同じです。
あるいはループ内で取得せずに最初に「count := Array.MaxIndex()」の形でMaxIndex()メソッドによって取得してもいいだろうと思います(が、私自身このメソッドの理解の正確さに自信がないので素朴なやり方を記載しています)。
私はアプリケーションの他に、よく開くファイル、よく開くフォルダ、AutoHotkeyの練習のために作ったミニゲーム類(ハイアンドローなど)をそれぞれキーに割り当てて選択できるようにしています。
あとは日時のフォーマットも複数パターン登録しておいて、前に書いた関数と合わせて呼び出せるようにしていたり、Gitをコマンドで使う時によくカレントディレクトリにするアドレスをリストにしていたりします。
割り当てるキーの数が少なくて済むのと、何を登録してあるのかが一目瞭然であるところがメリットです。もちろん本当に頻繁に使うものは個別に割り当てた方が良いわけですが、そこまででもないものはひと手間増えても「見てわかる」のが楽ですね。
※AutoHotkey関連記事が増えてきたのでマガジンを作りました。
この記事が気に入ったらサポートをしてみませんか?