![](/img/trans.png)
[英]Is it possible to add a NSStatusItem to a specific position in NSStatusBar?
[英]How to get all NSStatusItem elements of NSStatusBar in OSX?
我需要在OSX的狀態欄中獲取所有元素。
我試圖獲取系統的NSStatusBar id:[NSStatusBar systemStatusBar]但我不知道如何在其中獲取所有NSStatusItem。 我在NSStatusBar中找到了一個名為_items的私有方法,但我無法調用它:
[[NSStatusBar systemStatusBar] _items];
Xcode告訴我該方法不存在。
如何獲取NSStatusBar中的所有NSStatusItem元素?
謝謝
您無法將所有項目作為NSStatusItem
對象獲取,因為它們並非都屬於您的進程。
如果您只對屏幕上的位置以及哪些應用程序擁有它們感興趣,您可以使用CGWindow
API執行此CGWindow
,因為從技術上講,狀態項是(無邊框)窗口。 這是一個記錄所有狀態欄項信息的示例:
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,但這在任何地方都沒有記錄)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.