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).
Merci! Je vais l'essayer –
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. –
@ JonathanChacón, avez-vous trouvé la solution? – jimwan