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

Shell et commandes POSIX Discussion :

Récupérer les caractéristiques d'une fenêtre via xprop


Sujet :

Shell et commandes POSIX

  1. #1
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut Récupérer les caractéristiques d'une fenêtre via xprop
    Bonjour,

    Je dispose du script suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    getwinprop)
               urxvt -cr rgb:00/00/00 -hold -title getwinprop -g "60x14" -e \
               awk 'BEGIN {
               print "waiting a mouse click..."
               cmd="xprop"; while ((cmd | getline >0)){ \
               if (/^WM_CLASS/){sub(/.* =/, "\n[instance] ="); sub(/,/, "\n[class] ="); print}
               if (/^WM_NAME/){sub(/.* =/, "[title] ="); print}
               }
               print "\ndone."
               close(cmd)
               }'
              ;;
    J'ai réalisé plusieurs essais:

    (1) Clique sur la fenêtre du scratchpad:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    waiting a mouse click...
     
    [instance] = "urxvt"
    [class] = "URxvt"
    [title] = "scratchpad"
     
    done.
    (2) Clique sur la barre de dzen2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    waiting a mouse click...
    [title] = "dbar"
     
    [instance] = "dzen2"
    [class] = "dzen"
     
    done.
    (3) Clique sur le bureau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    waiting a mouse click...
     
    done.
    Je souhaiterai forcer l'affichage de [title] en dernier pour éviter l'affichage du (cas n°2) et modifier le script de tel sorte que lorsque "xprop" ne trouve aucune information (cas n°3), il affiche par exemple: "Rien à afficher" au lieu de "done."

    Un petit coup de main s'il vous plaît

    Merci beaucoup
    .Olivier

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Bonjour

    gensub() a justement été créé pour pallier l'absence de références arrières de sub() et gsub().
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    gensub() a justement été créé pour pallier l'absence de références arrières de sub() et gsub().
    J'ai regardé sur internet et il y a beaucoup d'exemples avec gensub() mais à ce niveau, je suis pommé
    .Olivier

  4. #4
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ gawk '
    > BEGIN {
    >      a = "abc def"
    >      b = gensub(/(.+) (.+)/, "\\2 \\1", "g", a)
    >      print b
    > }'
    def abc
    \\2 symbolise le deuxième groupe capturé avec les parenthèses de la regex.
    \\1 symbolise le premier groupe capturé avec les parenthèses de la regex.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  5. #5
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    Je comprends ton exemple mais je ne parviens pas à l'intégrer dans le script cité plus haut (en manque de neurones). Je suis très patient mais la gensub() me donne des boutons
    .Olivier

  6. #6
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 287
    Points : 12 744
    Points
    12 744
    Par défaut
    Bonjour,

    Et pourquoi tu ne lui précises pas l'ordre à ta commande ainsi que juste les propriétés qui intéresse ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    xprop WM_NAME WM_CLASS
    WM_NAME(STRING) = "xxxx@localhost:~/Bureau"
    WM_CLASS(STRING) = "gnome-terminal", "Gnome-terminal"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    xprop WM_CLASS WM_NAME
    WM_CLASS(STRING) = "gnome-terminal", "Gnome-terminal"
    WM_NAME(STRING) = "xxxx@localhost:~/Bureau"
    Cordialement.

  7. #7
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    getwinprop)
               urxvt -cr rgb:00/00/00 -hold -title getwinprop -g "60x14" -e \
               awk 'BEGIN {
               print "waiting a mouse click..."
               cmd="xprop WM_CLASS WM_NAME"; while ((cmd | getline >0)) { \
               if (/^WM_CLASS/){sub(/.* =/, "\n[instance] ="); sub(/,/, "\n[class] ="); print }
               if (/^WM_NAME/){sub(/.* =/, "[title] ="); print }
               }
               print "\ndone."
               close(cmd)
               }'
               ;;
    Merci pour l'info : xprop WM_CLASS WM_NAME. Tu m'a enlevé un bouton
    Ce qui me turlupine, c'est ce gensub() qui pourrait résoudre le cas n°3 (au lieu d'afficher "done", il affiche "aucune information" par exemple.
    .Olivier

  8. #8
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 287
    Points : 12 744
    Points
    12 744
    Par défaut
    Ou plus simplement un flag à positionner dans tes if et controller l'état du flag à la sortie de ta boucle pour savoir s'il faut afficher "done" ou "aucune information"...
    Cordialement.

  9. #9
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    Après réflexion, je préfère afficher tout le détail de "xprop" en cas de besoin.
    J'ai modifié le script à la manière de "xwininfo".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    getwinprop)
               urxvt -cr rgb:00/00/00 -hold -title getwinprop -g "70x30" -e \
               awk 'BEGIN
               print "xprop: Please select the window about which you"
               print "         would like information by clicking the"
               print "         mouse in that windows.\n"
               print | "xprop"
               }'
               ;;
    à l'affichage, j'ai donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    xprop: Please select the window about which you
           would like information by clicking the
           mouse in that window.
     
    WM_STATE(WM_STATE):
    etc.
    Existe-t-il une solution afin d'obtenir un affichage similaire en évitant tous ces print ? Qu'en pensez-vous ?
    .Olivier

  10. #10
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Dans la mesure où ta commande "xprop" n'utilise aucune variable interne au script awk, je ne vois pas pourquoi tu fais xprop à l'intérieur.

    Ton texte pourrait simplement être stocké dans un fichier, affiché avec la commande "cat".
    Pour une fois que la commande "cat" fait ce pour quoi elle faite .
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  11. #11
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    l'objectif n'est pas de stocker le résultat dans un fichier mais simplement de visualiser si nécessaire les caractéristiques d'une fenêtre à la volée.

    J'ai modifié le script sans awk:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    urxvt $params -title getwinprop -e sh -c "echo 'xprop: Please click in the window which you would like information.\n' && 'xprop'"
    Merci à tous pour votre aide et désolé si parfois mes explications ne sont pas aussi claires que les vôtres
    .Olivier

  12. #12
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    l'objectif n'est pas de stocker le résultat dans un fichier
    Ce n'est pas la sortie que je proposais de mettre dans un fichier, mais l'entrée.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment récupérer les données d'une fenêtre popup ?
    Par Felixfel dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 16/04/2012, 15h59
  2. [Lazarus] Récupérer les dimensions d'une fenêtre en plein écran
    Par Modulpro dans le forum Lazarus
    Réponses: 6
    Dernier message: 03/05/2011, 16h05
  3. Récupérer les dimensions d'une fenêtre
    Par developppez dans le forum Windows Forms
    Réponses: 4
    Dernier message: 17/12/2008, 14h04
  4. [VB.NET] Récupérer les caractéristiques d'une couleur
    Par leSeb dans le forum Windows Forms
    Réponses: 6
    Dernier message: 15/08/2004, 15h03

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