IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Trouver la fenêtre qui a le focus avec X11/XTest et X11GuiTest


Sujet :

Linux

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Trouver la fenêtre qui a le focus avec X11/XTest et X11GuiTest
    Bonjour,

    Je cherche à récupérer le nom de la fenêtre qui a actuellement le focus.
    En Perl, avec la librairie X11 GUI Test, la fonction GetInputFocus permet de récupérer l'ID de la fenêtre qui a actuellement le focus. La fonction GetWindowName permet d'avoir le nom de la fenêtre à partir de son ID.
    Le problème est qu'en combinant ces deux fonctions, j'obtiens l'identifiant mais je ne parviens pas à obtenir le nom associé à cet identifiant. Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $WinID = GetInputFocus();
    print "Focussed window id : " . $WinID . "\n";
    print "Focussed window name : " . GetWindowName($WinID) . "\n";
    De plus, lorsque j'essaye de lister toutes les fenêtres, je ne retrouve pas l'ID de la fenêtre qui a le focus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    @wins = FindWindowLike('.*') or die("Didn't find any windows!");
    print "FindWindowLike found " . @wins . " window(s).\n";
    foreach my $win (@wins) {
    	my $name = GetWindowName($win) || '[NO NAME]';
    	print "\t" . $win. " ($name)";
    }
    J'ai essayé de faire la même chose en C mais j'ai le même problème avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Display *focusDisplay;
    focusDisplay = XOpenDisplay(NULL);
    int retcode = 0;
    int param = 0;
    retcode = XGetInputFocus(focusDisplay, &focusWindow, &param);
    printf(stderr,"Focus Window = %u\n",focusWindow);
    char* windName;
    Status s = XGetWMName(focusDisplay, focusWindow, windName);
    fprintf(stderr,"Name= %s - status : %d\n",windName, s);
    Merci pour votre aide.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    en X11, si tu veux faire ça (je ne connais pas les XTest et autres tests) il fut descendre la hiérarchie de la Root (grâce à XQueryTree)

    Car la fenêtre en elle-même est la fenêtre X11, c'est à dire le rectangle d'écran (cela peut être le rectangle d'un Label, par exemple).

    Si tu veux récupérer le nom de la fenêtre que tu vois avec la barre et les boutons, il faut remonter jusqu'à que tu arrives au parent de haut niveau (directement sous le Window Manager).

    Donc la ton GetFocus doit te donner l'id du rectangle de plus bas niveau où tu te situes..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    La fonction XGetInputFocus prend un seul paramètre d'entrée : le display.
    Ce qui pourrait me faire penser qu'il parcours toutes les fenêtres du display ?

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par engy11 Voir le message
    La fonction XGetInputFocus prend un seul paramètre d'entrée : le display.
    Ce qui pourrait me faire penser qu'il parcours toutes les fenêtres du display ?
    très certainement, mais il n'empêche que :


    Citation Envoyé par souviron34 Voir le message
    Car la fenêtre en elle-même est la fenêtre X11, c'est à dire le rectangle d'écran (cela peut être le rectangle d'un Label, par exemple).
    ..
    Donc la ton GetFocus doit te donner l'id du rectangle de plus bas niveau où tu te situes..
    le id de la fenêtre X11 ne correspond pas au id de la fenêtre que tu vois, par exemple si c'est une appli..

    Il y a au moins 3 couches au-dessus : Shell, VendorShell, WMShell..

    Il faudrait donc remonter la hiérarchie à partir de là pour trouver la fenêtre la plus haute qui contient au plus près ta fenêtre, ou bien la fenêtre dont le nom correspond à ce que tu cherches..


    Disons que par exemple une appli Toto possède un texte Text, fasant partie d'une frame Frame..

    L'id du texte sera IdText.

    Sa fenêtre sera le rectangle défini par la bordure (comprise) de la zone.

    Le inputfocus te donnera cet id..

    Qui ne correspond sans doute pas à ce que tu cherches..

    Il faudrait que tu précises ce que tu cherches exactement..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

Discussions similaires

  1. Trouver la fenêtre qui a le focus avec la librairire Perl X11 GUI Test
    Par engy11 dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 18/09/2009, 11h14
  2. Trouver l'item qui a le focus dans un formulaire
    Par troumad dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/12/2007, 13h40
  3. Trouver le composant qui avait le focus
    Par pdeville dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 16/08/2006, 12h54
  4. fenètre qui s'ouvre avec un bouton formulaire
    Par nickg dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 13/02/2006, 22h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo