2009-02-16 4 views
5

Mac OS X Leopard dispose d'une implémentation de bureau virtuel appelée Spaces. Je veux de détecter par programme l'espace sur lequel l'utilisateur est actuellement.Comment détecter quel espace l'utilisateur est sous Mac OS X Leopard?

cacao est préférable mais AppleScript est acceptable s'il n'y a pas d'autre moyen. J'ai vu quelques implémentations d'AppleScript, mais les techniques qu'ils utilisaient me semblaient un peu trop compliquées à utiliser dans le code de production (l'une consistait à provoquer une erreur puis à analyser le message d'erreur pour obtenir l'espace actuel, l'autre a interrogé l'interface graphique du menu Espaces)

Répondre

15

Utilisez HIWindowGetCGWindowID pour obtenir le CGWindowID de votre WindowRef.

Utilisez cet ID avec CGWindowListCreateDescriptionFromArray à partir de CGWindow.h pour obtenir des informations sur votre fenêtre.

Examinez le dictionnaire renvoyé et extrayez la clé kCGWindowWorkspace (facultative). C'est votre identifiant d'espace pour votre fenêtre.

+0

kCGWindowWorkspace est dépréciée à 10,8 et les tests sur 10,11 Je ne vois pas cette clé semble jamais dans le dictionnaire, donc je suppose qu'il a été retiré. – GenericPtr

6

Si quelqu'un se soucie encore, je l'ai mis en place un peu commandline util sur la base des réponses ici que vous pouvez obtenir à http://github.com/shabble/osx-space-id

+0

+1000 si je pouvais. Votre étoile Shabble pour le téléchargement git! – zaf