2012-02-04 5 views
2

J'ai besoin de tous les éléments dans la barre d'état d'OSX.Comment obtenir tous les éléments NSStatusItem de NSStatusBar sous OSX?

J'ai essayé d'obtenir l'ID NSStatusBar du système: [NSStatusBar systemStatusBar] mais je ne sais pas comment obtenir tous les NSStatusItems. J'ai trouvé une méthode privée nommée _items dans NSStatusBar mais je ne peux pas l'appeler:

[[NSStatusBar systemStatusBar] _items];

Xcode me tould que cette méthode n'existe pas.

Comment puis-je obtenir tous les éléments NSStatusItem dans NSStatusBar?

Merci

Répondre

6

Vous ne pouvez pas obtenir tous les articles comme NSStatusItem objets parce qu'ils n'appartiennent pas tous à votre processus. Si vous êtes uniquement intéressé par leur emplacement à l'écran et quelles applications en sont propriétaires, vous pouvez le faire avec les API CGWindow, car les éléments d'état sont techniquement des fenêtres (sans bordure). Voici un exemple qui enregistre des informations sur tous les éléments de la barre d'état:

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]; 

Notez que les éléments du système ne sont pas inclus; ils sont tous combinés dans une fenêtre appartenant à "SystemUIServer". En outre, cette méthode peut ne pas être particulièrement fiable car la couche de fenêtre des éléments de la barre d'état peut changer (elle est supposée être 25 ici, mais cela n'est documenté nulle part).

+0

Merci! Je vais l'essayer –

+0

Bonjour, je dois obtenir des applications dans la barre d'état. Icônes telles que Dropbox, l'état de la batterie, etc .... Je veux les lister dans une liste. J'ai changé votre code pour lister toutes les fenêtres mais la boîte de dépôt et les autres applications n'apparaissent pas dans le résultat. –

+0

@ JonathanChacón, avez-vous trouvé la solution? – jimwan

Questions connexes