0

我尝试使用 Hammerspoon 通过以下脚本在 Firefox 中打开一个新窗口:

function newWindow() 
    local app = hs.application.find("Firefox")
    
    print(hs.inspect.inspect(app))
    print(app:title())
    print(app:bundleID())

    local item = app:findMenuItem("File")
    
    print(item)
end

hs.hotkey.bind({'alt', 'ctrl', 'cmd'}, 'n', newWindow)

虽然脚本能够找到 Firefox,但它无法找到我正在寻找的菜单项。但同时,我可以app:getMenuItems()用来检索整个菜单结构。

有谁知道为什么或任何应用程序的工作示例?

我正在使用 MacOS Big Sur 11.2.3

4

1 回答 1

2

我认为您正在寻找的是app:selectMenuItem()方法:

function newWindow() 
    local app = hs.application.find("Firefox")
    app:selectMenuItem({"File", "New Window"})
end
hs.hotkey.bind({'alt', 'ctrl', 'cmd'}, 'n', newWindow)

从文档:

hs.application:selectMenuItem(menuitem[, isRegex]) -> true or nil

选择一个菜单项(即模拟单击菜单项)

参数:

  • menuitem - 要选择的菜单项,指定为字符串或表格。有关详细信息,请参阅 hs.application:findMenuItem() 的 menuitem 参数。
  • isRegex - 一个可选的布尔值,默认为 false,仅在 menuItem 为字符串时使用。如果设置为 true,menuItem 将被视为正则表达式而不是要匹配的严格字符串

回报:

如果找到并选择了菜单项,则为真,否则为 nil(例如,因为找不到菜单项)

笔记:

根据所涉及的菜单项的类型,这将激活或勾选/取消勾选菜单项

http://www.hammerspoon.org/docs/hs.application.html#selectMenuItem

- 编辑 -

为避免多语言菜单结构,您还可以使用键盘快捷键打开新窗口:

function newWindow() 
    local app = hs.application.find("Firefox")
    hs.eventtap.keyStroke({'cmd'}, 'N', nil, app)
end
hs.hotkey.bind({'alt', 'ctrl', 'cmd'}, 'n', newWindow)
于 2021-07-20T00:29:37.260 回答