我需要在OSX中获取状态栏中的所有元素。
我试图获取系统的NSStatusBar id : NSStatusBar systemStatusBar,但我不知道如何才能获取其中的所有NSStatusItems。我在NSStatusBar中找到了一个名为_items的私有方法,但我无法调用它:
[[NSStatusBar systemStatusBar] _items];
Xcode告诉我那个方法并不存在。
如何获取NSStatusBar中的所有NSStatusItem元素?
谢谢
发布于 2012-02-04 15:51:01
您不能将所有项都作为NSStatusItem对象获取,因为它们并不都属于您的流程。
如果你只对它们在屏幕上的位置和哪些应用程序拥有它们感兴趣,你可以使用CGWindow API来做到这一点,因为从技术上讲,状态项是(无边界的)窗口。下面是一个记录所有状态栏项目信息的示例:
NSArray *windowInfos = (NSArray *)CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly, kCGNullWindowID);
for (NSDictionary *windowInfo in windowInfos) {
if (([[windowInfo objectForKey:(id)kCGWindowLayer] intValue] == 25)
&& (![[windowInfo objectForKey:(id)kCGWindowOwnerName] isEqual:@"SystemUIServer"])) {
NSLog(@"Status bar item: %@", windowInfo);
}
}
[windowInfos release];请注意,系统的项目不包括在内;它们都组合在一个属于"SystemUIServer“的窗口中。此外,这种方法可能不是特别可靠,因为状态栏项目的窗口层可能会发生变化(这里假设为25,但在任何地方都没有说明)。
https://stackoverflow.com/questions/9139197
复制相似问题