[UNDOCUMENTED CG] CGSGetWindowLevel() : récupérer le niveau d'une fenêtre

BruBru Membre
void CGSGetWindowLevel(int cid, int wid, int *level)

La fonction CGSGetWindowLevel de l'api Core Graphics permet de récupérer le "niveau"(level) d'une fenêtre.

  • cid : id de connection au window-server
  • wid : id de la fenêtre visée
  • level : niveau retourné par la focntion


Le niveau permet de déterminer le type de fenêtre selon le tableau suivant (liste non-exhaustive):


level

commentaire


0

fenêtre normale (ou standard)


3

fenêtre flottante


20

fenêtre du dock


21

icône dans le dock (icône ou fenêtre miniaturisée)


24

barre des menus active


25

mini-icône de statut (à  droite dans la barre des menus)


-20

ombre sous la barre de menu


-2147483607

icône du finder sur le desktop


-2147483628

fond d'écran

Réponses

  • décembre 2006 modifié #2
    [mode = remarque générale]
    Un grand merci pour toutes ces précisions sur ces méthodes non documentées.

    [mode = remarque pour ce cas-ci]
    Je viens de le remarquer par hasard: on peut visiblement arriver au même résultat en utilisant uniquement des fonctions documentées:

    [tt]int level = CGWindowLevelForKey([aWindow level]);[/tt]
  • BruBru Membre
    12:39 modifié #3
    dans 1167572835:

    Je viens de le remarquer par hasard: on peut visiblement arriver au même résultat en utilisant uniquement des fonctions documentées:
    [tt]int level = CGWindowLevelForKey([aWindow level]);[/tt]


    Non.
    La fonction CGWindowLevelForKey permet d'obtenir un window-level "officiel" à  partir d'une constante key-level.
    Par exemple, pour connaà®tre le window-level d'une fenêtre standard, il faut passer la constante kCGNormalWindowLevelKey (qui vaut 4). La valeur retournée est 0, ce qui correspond au level d'une fenêtre normale.
    L'utilité de cette fonction est moindre, puisque les levels des fenêtres sont eux aussi documentés (en partie) par Apple (voir ici ou dans le fichier CGWindowLevel.h présent dans les sdk des Developer tools).

    D'autre part (mais ça, tu ne pouvais pas le savoir), la doc Apple sur la méthode level de NSWindow est partiellement inexacte. Cette méthode retourne un window-level, et non un key-level.
    Donc, l'exemple que tu donnes ([tt]CGWindowLevelForKey([aWindow level])[/tt]) ne peut pas fonctionner.
    Chez moi, le résultat (sachant que aWindow est une bête fenêtre normale) retourne -2147483648, ce qui est INT_MIN.

    Dernière chose, la méthode level de NSWindow fait la même chose que la fonction undocumented CGSGetWindowLevel.
    Sauf que level ne fonctionne que sur des fenêtres cocoa, et que sur les objets NSWindow de sa propre appli.
    Dès l'instant où tu veux connaà®tre le level des autres fenêtres (carbon ou core-graphics, et des autres applis), CGSGetWindowLevel alors devient nécessaire.

    .
  • AntilogAntilog Membre
    mars 2008 modifié #4
    [size=12pt][shadow=red,left]Bru, tu es un génie![/shadow][/size]

    <3 <3 <3 <3 <br />
          <3 <3 <3 <br />
    Je cherchais partout sur Internet la fonction qui me dirait qu'une fenêtre est miniaturisée dans le Dock, pas moyen de trouver, et je l'avais là , sur mon bon vieil Objective-Cocoa!

    Merci aussi à  bodysoulspirit et Philippe49 pour m'avoir amené au détour d'un post à  chercher ici!
    Tiens, ça mérite une tournée générale:
    :p :p   :p
    :p :p
  • AntilogAntilog Membre
    12:39 modifié #5
    Arg!

    Je me suis réjoui trop vite  :'(

    J'ai testé, sur toutes les fenêtres retournées par CGSGetWindowList
    et je trouve en niveau 0:
    - les fenêtres "normales"
    - des fenêtres qui n'ont jamais été affichées depuis le démarrage (alertes de Snapz Pro X)
    - les fenêtres placées dans le dock.

    Par contre j'ai aussi d'autres fenêtres de SnapzPro en niveau 19
    et le finder (en fait, un rectangle de dimension 0 en haut à  gauche de l'écran), en niveau -2147483647

    Pourtant, à  la lecture du post de Bru, j'étais persuadé que c'était ce que je cherchais...
    :)beta:


  • AliGatorAliGator Membre, Modérateur
    12:39 modifié #6
    Chai pas grave on a tchou bu et chétai bien bon che p'tit verre ché vrai qu'cha vzai longtemps  :p
Connectez-vous ou Inscrivez-vous pour répondre.