swift - 获取应用程序最前面窗口的更好方法 - Swift
问题描述
按名称获取指定应用程序并不难
NSWorkspace.shared.runningApplications.filter{$0.localizedName == "Safari"}.first
但是如何获取这个应用程序的第一个窗口,并用这个窗口进行小型化呢?
与此类似的东西
let app = NSWorkspace.shared.runningApplications.filter{$0.localizedName == "Safari"}.first
app.frontmostWindow.miniaturize()
解决方案
您可以使用 ScriptingBridge 执行此操作
import ScriptingBridge
let safari = SBApplication(bundleIdentifier: "com.apple.Safari")
let windowClass = appleEvent(keyword: "cwin")
let miniaturized = appleEvent(keyword: "pmnd")
let windows = safari?.elementArray(withCode: windowClass)
let frontMostWindow = (windows?.firstObject as? SBObject)?.get() as? SBObject
frontMostWindow?.property(withCode: miniaturized).setTo(true)
func appleEvent(keyword: StaticString) -> AEKeyword {
keyword
.utf8Start
.withMemoryRebound(to: DescType.self, capacity: 1, \.pointee)
.bigEndian
}
为了能够运行此代码,您需要一个com.apple.security.automation.apple-events
授权设置为 true 的代码签名应用程序(允许将 AppleEvents 发布到其他应用程序)
推荐阅读
- python-2.7 - 如何在元组列表中打印以 P: 开头的短语
- java - 如何将 lwjgl 3.2.2 库包含到 intelliJ IDE 中?
- mysql - Mysql转换成单选查询
- python - 如何在 django 管理面板的“添加用户”部分添加更多字段?
- apache-spark - Apache spark 中的列参考
- node.js - 如何在异步函数 discord.js 中使用 message.react() 中的循环
- ansible - Ansible:在上一个主机上启动服务完成后,在下一个主机上启动服务
- reactjs - React - 功能和组件之间的区别
- list - 如何找出列表类型所属的类?
- android - 如何在 RecyclerView 适配器中使用 getLifecycle().addObserver()