AutoHotkeyのスクリプトで、 トレイアイコンを右クリックした時に出るメニューの追加方法。
Menu
AutoHotkeyではMenu
コマンドを
使うことでスクリプトを立ち上げた時に出る
トレイアイコン右クリックした時に出るメニューのカスタマイズが出来ます。
取り敢えず以下の例の様な事が分かれば大体使いこなせるかな、という感じです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
|
上のスクリプトを実行するとトレイアイコンの右クリックメニューがこんな感じになります。
以下補足。
メニューの追加
新しいメニューを追加するにはAdd
を使い、
1
|
|
の様に書きます。これでMenu1
という名前のメニューアイテムが今あるトレイメニューの下に出来ます。
4つめの引数を与えるとそれがラベルになります。
1
|
|
ラベルは
1 2 3 |
|
といった感じにそのメニューアイテムをクリックした時に行う動作を設定する時に使う名前です。 4つ目の引数が省略された場合はメニューアイテム名がラベルになります。
この制限のためか、ラベルを設定しない場合には名前に空白は入れられません。
また、メニューアイテムを追加する際には対応するラベルの動作が指定されていないと
Error: Target label does not exist.
といったエラーが出ます。
Add
の後に引数を与えないと区切り線を入れる事が出来ます。
サブメニュー
上ではまずMenu, Tray,...
と、Tray
を第一引数に与えてますが、
この部分はメニュー名になります。
Tray
は右クリックした直後に現れるメニューで、
この下にサブメニューを作ることも出来ます。
1
|
|
の様にするとSubMenu
という名前のメニューアイテムが追加され
マウスを持っていくとそのサブメニューが展開されます。
サブメニューを追加するときには4つめの引数に:
を先頭に付けたサブメニュー名を書きます。
このサブメニュー内のアイテムを追加するにはTray
の代わりに最後に指定しているラベルMySubMenu
を使って
1
|
|
の様にしていけばOK。
ただしサブメニューをAdd
するよりも先にサブメニュー内の項目を設定しておかないとエラーが出るので
上の様にまずサブメニューを作ってから加える様にします。
Check
メニューアイテムの左側にチェックを付けることも出来ます。 チェックを付けるには
1
|
|
な感じでCheck
を使います。
ここの3つ目の引数のところはメニューアイテム名(Add
でも3つ目の引数)で
ラベルではないのでちょっと注意。
チェックを外すにはUncheck
、チェックをトグルするにはToggleCheck
が使えます。
ただ、チェック状態を調べる方法が無い(と思う。。。)ので
中で色々状態を変化させたい場合には、ToggleCheck
を使わずに
Menu2:
にあるように適当なグローバル変数(Menu2Value
)を用意しておいて
それを1と0でチェックしながら反転させる、と言った事をすると
メニューのチェックを使ってスクリプト中の変数を変化させる事が出来ます。
アイコン
トレイアイコン自体を変えるには
1
|
|
とします。
A_LineFile
は今読んでるスクリプトファイルへのパスで、..
を足すことでファイルの有る
フォルダへのパスになるので、ここではスクリプトと同じフォルダにある
アイコンファイルを指定しています。
vim_ahkではこれを使ってモード変化時にトレイアイコンを変更する様にしています。
各メニューアイテムにもアイコンを表示させる事が出来て、
1
|
|
の様に第3引数にメニューアイテム名を入れてその後にアイコンへのパスを入れると メニューアイテムのアイコンになります。
ただし、このアイコンは上のCheckと同じ所に表示されるため、 Checkが入っているメニューではチェックが優先されてアイコンが表示されません。
Default
1
|
|
この指定をするとメニューアイテムの名前が太文字で表示される様になり、 トレイアイコンをダブルクリックした時に実行される動作がこのメニューのものになります。
デフォルトでは元からあるメニューの一番上にあるOpen
になっています。
Delete/DeleteAll/NoStandard
上の例には無いですが、
1
|
|
とするとMenu1を削除できます。
また、
1
|
|
とすると全ての追加メニュー項目が削除されます。
ただ、これらで削除できるのは自分で追加したものだけで、元々あるメニューは削除されません。
もともとあるメニューを削除するには
1
|
|
とします。
これで自分のメニューだけを載せる事が出来ますが、
この場合、Exit
もなくなるのでスクリプトを停止する手段を自分で用意しないと
止められなくなります。(タスクマネージャーとかから無理やりプロセスを消すしか無い。)
なのでこういった場合は自分でExit
を作ってメニューに追加する必要があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
こんな感じでExitApp
を実行するとスクリプトが終了します。
^!#+a
上のスクリプトの最後に
1 2 3 |
|
とありますが、これは単にスクリプトを終了させないためのダミーキーマップです。 何かしらのキーマップ設定があるとスクリプトは走り続けますが、 そうでないと一通り実行して終了してしまってトレイアイコンを調べられないので。
追記: 2017/11/22
このようなダミーマップをしなくても スクリプトの最初に
1
|
|
と書いておけばそのスクリプトはマップがある場合同様ExitApp
などを呼ばない限り終了しなくなります。
追記ここまで