我想访问 Mac 菜单栏中当前的图标,但找不到相关的 API 和类。我看过NSStatusBar (代表菜单栏),但它不提供对其包含的菜单栏应用程序的任何公共(public)访问。我还看过NSStatusItem和 NSStatusBarButton ,它们分别代表菜单栏中的项目及其视觉表示,但我发现的有关它们的所有内容都是关于制作您自己的。
如何以编程方式了解 Mac 菜单栏中的图标以及它们对应的应用程序?
最佳答案
您可以使用 CoreGraphics 中提供的功能:
let windowList = CGWindowListCopyWindowInfo([.optionOnScreenOnly], kCGNullWindowID) as! [[String: Any]]
for window in windowList {
let boundsDict = window[kCGWindowBounds as String] as! CFDictionary
let applicationName = window[kCGWindowOwnerName as String] as! String
let windowName = window[kCGWindowName as String] as! String
if let bounds = CGRect(dictionaryRepresentation: boundsDict), bounds.origin.y == 0 {
print(applicationName, windowName, bounds)
}
}
在测试过程中,我发现状态栏项目的边界粘在屏幕的最顶部。但尚未在多屏幕设置上进行测试。尽管如此,您所能获得的只是拥有状态栏项目的应用程序的名称。我还没有找到一种方法来创建引用栏上的项目的 NSStatusItem
实例。
关于xcode - 如何获取 Mac 菜单栏中当前的图标列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42912012/