首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在OSX中获取NSStatusBar的所有NSStatusItem元素?

如何在OSX中获取NSStatusBar的所有NSStatusItem元素?
EN

Stack Overflow用户
提问于 2012-02-04 15:28:09
回答 1查看 1.1K关注 0票数 4

我需要在OSX中获取状态栏中的所有元素。

我试图获取系统的NSStatusBar id : NSStatusBar systemStatusBar,但我不知道如何才能获取其中的所有NSStatusItems。我在NSStatusBar中找到了一个名为_items的私有方法,但我无法调用它:

[[NSStatusBar systemStatusBar] _items];

Xcode告诉我那个方法并不存在。

如何获取NSStatusBar中的所有NSStatusItem元素?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2012-02-04 15:51:01

您不能将所有项都作为NSStatusItem对象获取,因为它们并不都属于您的流程。

如果你只对它们在屏幕上的位置和哪些应用程序拥有它们感兴趣,你可以使用CGWindow API来做到这一点,因为从技术上讲,状态项是(无边界的)窗口。下面是一个记录所有状态栏项目信息的示例:

代码语言:javascript
复制
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,但在任何地方都没有说明)。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9139197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档