簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM