0

AutoHotkeyコマンドをMenu使用すると、スクリプトの通知領域アイコンのコンテキストメニューをカスタマイズできますが、メニューエントリにラベル/サブルーチンを添付する必要があるようです。

サブルーチンに変換できる関数がいくつかありますが、それらは使いやすく明確であり、変換するためにリファクタリングが必要なローカルもあるため、変換したくない関数があります。さらに、関数は自動的に実行されず、呼び出す必要がありますが、サブルーチンはコードのセクションにラベル付けされているだけなので、無意識のうちに呼び出されないように追加の作業が必要になります。実際、AHKのマニュアルページでは、Gosub代わりに関数を使用することを具体的に提案しています。

Gosubは単純な汎用サブルーチンに役立ちますが、より複雑な目的で関数を使用することを検討してください。

サブルーチンの明らかな欠点の1つは、引数を取ることができないことです。

ファンクトンにバインドされたメニューエントリを作成する方法はありますか?

4

2 に答える 2

1

returnステートメントを適切に使用すると、サブルーチンは自動的に実行されません。

原則として、return各サブルーチンまたは複数行のホットキーの最後に を付けます (単一行のホットキーには必要ありません)。(関数の実行は閉じ中かっこで終了するため、もちろん値を返したり、関数内の別の場所で終了したりしない限り、リターンは必要ありません。)

また、スクリプトの自動実行セクションの外でサブルーチンを定義して、スクリプトの開始時にサブルーチンが自動的に実行されないようにしてください。

AHK ドキュメントの「自動実行」セクションの詳細:

スクリプトの先頭 (自動実行セクション) スクリプトがロードされると、一番上の行から実行が開始され、Return、Exit、ホットキー/ホットストリング ラベル、またはスクリプトの物理的な最後 (いずれか) に到達するまで続行されます。最初に来ます)。スクリプトのこの上部は、自動実行セクションと呼ばれます。

永続的ではなく、ホットキー、ホットストリング、OnMessage、および GUI がないスクリプトは、自動実行セクションが完了すると終了します。そうしないと、ホットキー、ホットストリング、GUI イベント、カスタム メニュー項目、タイマーなどのイベントに応答して、アイドル状態で実行されたままになります。

EDIT : 残念ながら、方向関数呼び出しをメニューにバインドすることはできません。これはサポートされていないためです。ただし、対応するサブルーチン内から関数を呼び出すことはできます (これで、サブルーチンが自動的に実行されないようにする方法がわかりました)。一部の状態をグローバルに公開することで、関数に引数を渡す必要がなくなります。ただし、それをしたくない場合は、その時点で「バインドされた」関数に渡したい値に初期化された変数を作成し、それらを使用して「バインドされた」関数と同等のものを作成できます。あなたがかけたかった電話。例えば:

subroutine:
arg1 = <some expression>
arg2 = <some expression>
MyFunction(arg1, arg1)
return

MyFunction(a, b) 
....
}
于 2012-10-05T19:21:41.620 に答える
1

各サブルーチンで対応する関数を呼び出すことができます。

于 2012-09-30T19:16:14.063 に答える