WinMenuSelectItem

调用指定窗口菜单栏中的菜单项.

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

参数

WinTitle, WinText, ExcludeTitle, ExcludeText

如果这些都是空白或省略, 将使用上次找到的窗口. 否则, 为 WinTitle 指定窗口标题或其他条件, 来标识目标窗口, 和/或为 WinText 指定目标窗口的单个文本元素的子字符串(由包含的 Window Spy 实用程序显示).

ExcludeTitleExcludeText 可用于根据标题或文本排除一个或多个窗口. 它们的规范类似于 WinTitleWinText, 除了 ExcludeTitle 不识别除窗口标题之外的任何条件.

窗口标题和文本是区分大小写的. 默认情况下, 不检测隐藏窗口, 而检测隐藏文本元素, 除非使用 DetectHiddenWindowsDetectHiddenText 进行更改. 默认情况下, 窗口标题必须以指定的 WinTitleExcludeTitle 开头才能匹配, 除非使用 SetTitleMatchMode 进行更改.

Menu

顶级菜单的名称, 例如 File, Edit, View. 此参数也可以使用期望的菜单项的位置, 例如 1& 表示首个菜单, 2& 表示第二个等.

根据当前用户区域设置的规则, 搜索是不区分大小写的, 并在第一个匹配项处停止. 在菜单项中使用和符号(&) 来表示带下划线的字母 通常 是不必要的(例如 &File 等同于 File).

已知限制: 如果参数包含一个和符号(&), 那么它必须与项目名称完全匹配, 包括所有非原义的和符号(隐藏或显示为下划线). 如果参数不包含和符号, 则忽略所有符号. 例如, 显示为 "a & b" 的项可能匹配的参数值为 a && ba b.

[v1.1.28+]: 指定 0& 使用窗口的系统菜单.

SubMenu1

要选择的菜单项名称或位置(请参阅上面). 如果顶级项目不包含菜单(罕见的), 则可以省略此项.

SubMenu2, SubMenu3, SubMenu4, SubMenu5, SubMenu6

如果前面的子菜单本身包含一个菜单, 那么这是子菜单项的名称或位置.

错误处理

[v1.1.04+]: 此命令失败时会抛出异常. 想了解更多信息, 请参阅运行时错误.

如果遇到问题则 ErrorLevel 被置为 1, 否则为 0.

备注

使用此命令时, 目标窗口可以处于不活动状态. 然而, 某些窗口可能需要处于非最小化状态.

此命令对于使用非标准菜单栏的应用程序 无效. 例如 Microsoft Outlook 和 Outlook Express, 它们使用伪装的工具栏作为菜单栏. 在这种情况下, 考虑使用 ControlSendPostMessage, 它们应该能和一些这样的非标准菜单栏交互.

参数中的菜单名称还可以使用位置代替. 提供这种方法是为了支持不包含文本的菜单(可能是由于它们包含文本的图片而不是真实的文本). 位置 1& 表示首个菜单项(例如 File 菜单), 位置 2& 表示第二个菜单项(例如 Edit 菜单) 等. 为了确定菜单项的位置, 菜单分隔线也作为菜单项计算.

系统菜单[v1.1.28+]

Menu 可以是 0&, 以选择窗口系统菜单的项目, 菜单通常在用户按下 Alt+Space 或点击窗口标题栏中的图标时出现. 例如:

; 粘贴命令到 cmd.exe 而不用激活窗口.
Clipboard := "echo Hello, world!`r"
WinMenuSelectItem ahk_exe cmd.exe,, 0&, Edit, Paste

警告: 仅在窗口的系统菜单中具有自定义项目时使用此项.

如果窗口还没有自定义系统菜单, 则将具有创建一个标准系统菜单的副本并关联到目标窗口的副作用. 该副本在脚本退出时被系统销毁, 导致其他脚本无法访问该副本. 因此, 避免在所有显示标准项目的窗口上使用 0&. 作为代替, 直接 post(发布) WM_SYSCOMMAND 消息. 例如:

; 与 "WinMinimize A" 类似, 但最小化时播放系统声音(如果设置有).
WM_SYSCOMMAND := 0x0112
SC_MINIMIZE := 0xF020
PostMessage WM_SYSCOMMAND, SC_MINIMIZE, 0,, A

ControlSend, PostMessage

示例

选择记事本的 文件 -> 打开 菜单. 这个例子在 Windows 11 或更高版本系统可能会失败, 因为它需要经典版本的记事本.

WinMenuSelectItem, Untitled - Notepad,, File, Open

与上述相同, 只是按位置而不是按名称进行. 在 Windows 10 中, 2& 必须被替换为 3&, 因为新的 "New Window" 菜单项. 这个例子在 Windows 11 或更高版本系统可能会失败, 因为它需要经典版本的记事本.

WinMenuSelectItem, Untitled - Notepad,, 1&, 2&

选择主窗口中View -> Lines most recently executed.

#Persistent
WinShow, ahk_class AutoHotkey
WinMenuSelectItem, ahk_class AutoHotkey,, View, Lines most recently executed