MenuSelect

指定されたウィンドウのメニューバーからメニュー項目を呼び出します。

MenuSelect WinTitle, WinText, Menu , SubMenu1, SubMenu2, SubMenu3, SubMenu4, SubMenu5, SubMenu6, ExcludeTitle, ExcludeText

パラメータ

WinTitle, WinText, ExcludeTitle, ExcludeText

型:文字列整数またはオブジェクト

もしこれらの項目が未設定または省略されたときは、最後に見つかったウィンドウが使用されます。そうでないときは、WinTitleウィンドウタイトルまたはターゲットウィンドウを識別するための他の基準、および/またはWinTextにターゲットウィンドウの単一のテキスト要素からの部分文字列(付属のWindow Spyユーティリティを使えばわかります)を指定します。

ExcludeTitleExcludeTextはウィンドウのタイトルまたはテキストで除外するために使用します。指定の仕方はWinTitleWinTextに似ていますが、ExcludeTitleはウィンドウのタイトル以外の基準(ウィンドウクラスやHWNDなど)を認識しません。

ウィンドウのタイトルとテキストは大文字と小文字を区別します。DetectHiddenWindows関数 と DetectHiddenText関数で変更しない限り、初期設定では非表示ウィンドウは検出されず、非表示テキストは検出されます。SetTitleMatchMode関数で変更しない限り、初期設定ではウィンドウのタイトルはその中のどこかにWinTitleまたはExcludeTitleを含んでいれば一致します。

Menu

型:文字列

最上位メニューの名称(または名称の接頭語)、例:"ファイル""編集""表示"。また、"1&"で1つ目のメニュー、"2&"で2つ目のメニューを表すなど、目的のメニューの位置を表すことも可能です。

検索は、現在のユーザーのロケールの規則に従って大文字と小文字を区別せず、最初に一致した項目で停止します。メニュー項目の下線文字を示すアンパサンド(&)の使用は通常必要ありません(例:"&File""File"と同じです)。

既知の制限事項:パラメータにアンパサンドが含まれる場合、リテラル以外のアンパサンド(非表示または下線表示)も含めて、アイテム名と正確に一致する必要があります。パラメータにアンパサンドが含まれていない場合、リテラルも含めてすべてのアンパサンドが無視されます。例えば、"a & b "と表示される項目は、a && bまたはa bというパラメータ値と一致する場合があります。

ウィンドウのシステムメニューを使用する場合は、"0&"を指定します。

SubMenu1

型:文字列

選択するメニュー項目の名前またはその位置。最上位のアイテムにメニューがない場合(稀)には省略可能です。

SubMenu2, SubMenu3, SubMenu4, SubMenu5, SubMenu6

型:文字列

If the previous submenu itself contains a menu, this is the name of the menu item inside, or its position.

エラー処理

ウィンドウやコントロールが見つからなかったり、Win32標準のメニューがない場合は、TargetErrorがスローされます。

メニュー、サブメニュー、メニューアイテムが見つからない場合、または最後のメニューパラメータがサブメニューを開くメニューアイテムに対応する場合、ValueErrorがスローされます。

備考

この機能を使用するためには、ターゲットウィンドウがアクティブである必要はありません。ただし、一部のウィンドウは最小化しない状態が必要な場合があります。

この機能は、標準以外のメニューバーを使用するアプリケーションでは動作しません。例えば、Microsoft OutlookやOutlook Expressは、メニューバーに偽装されたツールバーを使用しています。このような場合は、ControlSendPostMessageを使用することを検討してみてください。

メニュー名のパラメーターは、位置を指定することも可能です。この方法は、テキストを含まないメニューをサポートするために存在します(おそらく、実際のテキストではなく、テキストの画像を含むため)。ポジション1&は1番目のメニュー項目(例:ファイルメニュー)、ポジション2&は2番目のメニュー項目(例:編集メニュー)、といった具合に。メニューの区切り線は、メニューの位置を決定するためのメニュー項目としてカウントされます。

システム メニュー

Menuは、 Alt+Spaceを押すか、ウィンドウのタイトルバーのアイコンをクリックすると表示されるウィンドウのシステムメニューの中の項目を選択するために"0&"を使用することができます。事例:

; ウィンドウをアクティブにせずに、cmd.exeにコマンドを貼り付ける。
A_Clipboard := "echo Hello, world!`r"
MenuSelect "ahk_exe cmd.exe",, "0&", "Edit", "Paste"

注意:システムメニューにカスタム項目があるウィンドウズでのみ使用します。

ウィンドウにカスタムシステムメニューがまだない場合、標準システムメニューのコピーが作成され、副作用としてターゲットウィンドウに割り当てられます。このコピーは、スクリプトが終了するときにシステムによって破棄され、他のスクリプトはアクセスできない状態になります。したがって、すべてのウィンドウに表示される標準的な項目には、0&を使用しないようにしてください。代わりに、WM_SYSCOMMANDメッセージを直接投稿してください。事例:

; [WinMinimize "A"]のように、最小化のためのシステム音も再生します。
WM_SYSCOMMAND := 0x0112
SC_MINIMIZE := 0xF020
PostMessage WM_SYSCOMMAND, SC_MINIMIZE, 0,, "A"

ControlSendPostMessage

Selects File -> Open in Notepad. この例は、Windows 11以降では、クラシック版のメモ帳を必要とするため、失敗する可能性があります。

MenuSelect "Untitled - Notepad",, "File", "Open"

名前ではなく役職で行う以外は上記と同じです。Windows 10では、「新しいウィンドウ」メニューが新設されたため、2&を3&に置き換えてください。この例は、Windows 11以降では、クラシック版のメモ帳を必要とするため、失敗する可能性があります。

MenuSelect "Untitled - Notepad",, "1&", "2&"

メインウィンドウView -> Lines most recently executedを選択します。

WinShow "ahk_class AutoHotkey"
MenuSelect "ahk_class AutoHotkey",, "View", "Lines most recently executed"