当前位置: 首页 > 教程 > Mac软件教程 > Hammerspoon for Mac(自动化批处理软件) 如何对应用程序事件和wifi事件做出反应?

Hammerspoon for Mac(自动化批处理软件) 如何对应用程序事件和wifi事件做出反应?

Mac Hammerspoon是OS X的桌面自动化工具。它将各种系统级API连接到Lua脚本引擎,允许您通过编写Lua脚本对系统产生强大的影响。这次小编给大家讲解一下Hammerspoon for Mac(自动化批处理软件) 如何对应用程序事件和wifi事件做出反应?

对应用程序事件做出反应

使用hs.application.watcher回调,我们可以对各种应用程序级事件做出反应,例如正在启动,退出,隐藏和激活的应用程序。

我们可以通过创建一个非常简单的回调来证明这一点,这将确保当您激活Finder应用程序时,它的所有窗口都将被带到显示器的前面。

function applicationWatcher(appName, eventType, appObject)
 if (eventType == hs.application.watcher.activated) then
 if (appName == "Finder") then
 -- Bring all Finder windows forward when one gets activated
 appObject:selectMenuItem({"Window", "Bring All to Front"})
 end
 end
end
appWatcher = hs.application.watcher.new(applicationWatcher)
appWatcher:start()

首先,我们定义一个接受三个参数的回调函数,并在其中检查触发该函数的事件类型是否是一个被激活的应用程序。然后我们检查被激活的应用程序是否是Finder。如果是,我们选择其菜单项将其所有窗口都放在前面。

然后,我们创建一个应用程序观察器对象,它将调用我们的函数,并告诉它启动。

请注意,我们保留了对watcher对象的引用,而不是简单地调用hs.application.watcher.new(applicationWatcher):start()。这样做的原因是,:stop()如果我们需要,我们可以稍后调用观察者(例如,在重新加载我们的配置的函数中 - 有关如何自动重新加载Hammerspoon配置的信息,请参阅Fancy Config Reloading示例)。

对wifi事件做出反应

如果你使用MacBook,那么你家里可能有一个WiFi网络。Hammerspoon在您到家并加入您的WiFi网络或离家出发并离开网络时触发事件非常简单。在这种情况下,我们将做一些简单的事情并调整MacBook的音量,使其在您离家时为零(保护您免受在咖啡店打开MacBook并肆无忌惮地播放音乐的耻辱感)在家里玩!)

wifiWatcher = nil
homeSSID = "MyHomeNetwork"
lastSSID = hs.wifi.currentNetwork()

function ssidChangedCallback()
 newSSID = hs.wifi.currentNetwork()

 if newSSID == homeSSID and lastSSID ~= homeSSID then
 -- We just joined our home WiFi network
 hs.audiodevice.defaultOutputDevice():setVolume(25)
 elseif newSSID ~= homeSSID and lastSSID == homeSSID then
 -- We just departed our home WiFi network
 hs.audiodevice.defaultOutputDevice():setVolume(0)
 end

 lastSSID = newSSID
end

wifiWatcher = hs.wifi.watcher.new(ssidChangedCallback)
wifiWatcher:start()

在这里,我们创建了一个回调函数,将当前WiFi网络的名称与之前网络的名称进行比较,并检查我们是否已从预定义的家庭网络转移到其他地方,反之亦然,然后用于hs.audiodevice调整系统容量。

相关文章