Hammerspoon mac这是一款macOS平台的自动化工具,可以帮助我们大大提高效率,适用于窗口管理、音乐播放、应用管理,甚至是网络请求……基本可以做到指哪打哪。应用场景:常用软件使用快捷键启动、高效快速的窗口管理、高效的音乐播放控制等。

与应用程序菜单交互
有时,自动化某事的唯一方法是与应用程序的GUI交互,这不是理想的,但通常需要完成某些事情。
为了说明这一点,我们将构建一个热键,在多个用户代理字符串之间循环Safari(即它如何向Web服务器标识自己)。要做到这一点,你需要有Safari浏览器Develop
启用菜单,您可以通过勾选做Show Develop menu in menu bar
在Safari→Preferences→Advanced
。
function cycle_safari_agents()
hs.application.launchOrFocus("Safari")
local safari = hs.appfinder.appFromName("Safari")
local str_default = {"Develop", "User Agent", "Default (Automatically Chosen)"}
local str_ie10 = {"Develop", "User Agent", "Internet Explorer 10.0"}
local str_chrome = {"Develop", "User Agent", "Google Chrome — Windows"}
local default = safari:findMenuItem(str_default)
local ie10 = safari:findMenuItem(str_ie10)
local chrome = safari:findMenuItem(str_chrome)
if (default and default["ticked"]) then
safari:selectMenuItem(str_ie10)
hs.alert.show("IE10")
end
if (ie10 and ie10["ticked"]) then
safari:selectMenuItem(str_chrome)
hs.alert.show("Chrome")
end
if (chrome and chrome["ticked"]) then
safari:selectMenuItem(str_default)
hs.alert.show("Safari")
end
end
hs.hotkey.bind({"cmd", "alt", "ctrl"}, '7', cycle_safari_agents)
我们在这里做的是首先启动Safari或将其带到前面(如果它已经运行)。这是任何菜单交互中的重要步骤 - 通常会禁用当前未关注的应用程序的菜单。
然后我们使用了对Safari本身的引用hs.appfinder.appFromName()
。使用此对象,我们可以搜索可用的菜单项并与它们进行交互。具体来说,我们正在寻找三个用户代理字符串的当前状态Develop→User Agent
。然后我们检查它们中的哪一个被勾选,然后选择下一个。
因此,反复按⌘+ ⌥+ ⌃+ 7将在默认用户代理字符串,IE10用户代理和Chrome用户代理之间循环。每次,我们都会显示一个简单的屏幕警报,其中包含我们已循环访问的用户代理的名称。