NSRunningApplication 是 macOS 的一个系统框架类,用于表示和操作当前正在运行的应用程序。它属于 AppKit 框架中的 NSWorkspace 子系统。
NSRunningApplication 代表系统中某个“正在运行的 App”,可以用它获取信息,如名称、进程 ID、是否活跃、是否在前台,甚至还能切换到该 App。
常用功能
1、获取当前运行的 App 列表:用于查找特定 App,如微信、QQ;
2、获取前台活跃的 App:检测用户当前正在使用哪个 App;
3、激活(bring to front)某个 App:将某 App 切换到前台;
4、获取某个 App 的 PID(进程 ID):用于辅助功能、AX 监听;
5、终止某个 App:以编程方式关闭 App(慎用)。
常用属性
let app: NSRunningApplication = ...
app.localizedName // App 名称,如 "Safari"
app.bundleIdentifier // App Bundle ID,如 "com.apple.Safari"
app.processIdentifier // App 的 PID(进程号)
app.isActive // 是否当前在前台
app.isHidden // 是否被隐藏
app.isTerminated // 是否已终止
使用场景
1、获取所有正在运行的 App
let runningApps = NSWorkspace.shared.runningApplications
for app in runningApps {
print("\(app.localizedName ?? "Unknown") - \(app.bundleIdentifier ?? "") - PID: \(app.processIdentifier)")
}
// 墙纸 - com.apple.wallpaper.agent - PID: 847
// 邮件 - com.apple.mail - PID: 95130
2、获取Google浏览器的PID
if let ChromeApp = NSWorkspace.shared.runningApplications.first(where: { $0.bundleIdentifier == "com.google.Chrome" }) {
print("Chrome PID: \(ChromeApp.processIdentifier)")
}
// Chrome PID: 88305
可以拿这个 PID 去配合 AXUIElementCreateApplication(pid) 创建无障碍对象进行监听。
总结
NSRunningApplication可以获取所有App状态与窗口,判断App是否运行,可以配合NSWordspace切换App到前台。
相关文章
1、macOS应用管理类NSWorkspace:https://fangjunyu.com/2025/06/22/macos%e5%ba%94%e7%94%a8%e7%ae%a1%e7%90%86%e7%b1%bbnsworkspace/