Comment obtenir l'ID de fenêtre à partir de la pile de fenêtres xdotool

12

J'ai besoin d'un identifiant de fenêtre active ou ciblée. J'essaie d'utiliser la xdotoolcommande. Il y a commande:

xdotool getactivewindow

le résultat est enregistré dans la pile de fenêtres. Je veux obtenir l'identifiant widnow de cette pile de fenêtres. Commander

xdotool getactivewindow getwindowpid

ne me satisfait pas. Je ne veux pas obtenir l'ID de fenêtre par ID de processus.

Mariusz
la source

Réponses:

11

Je pense que xdotool getactivewindowc'est ce que vous voulez - l'avez-vous essayé?

Il imprime l'id de la fenêtre (à partir de la pile de fenêtres) s'il n'y a pas d'autres sous-commandes xdotool sur la ligne de commande.

Par xdotool getactivewindow getwindowpidexemple, getactivewindowplace l'id sur la pile de fenêtres et getwindowpidutilise cet id pour interroger le PID. Notez que l'exécution de cette commande dans le terminal renvoie toujours l'ID de la fenêtre du terminal, car elle est active. Afin d'obtenir l'ID d'une autre fenêtre, essayez de sleep 2s && xdotool getactivewindowsélectionner la fenêtre d'intérêt dans l'intervalle de temps de deux secondes.


Il y a une complication lors de l'utilisation xdotoolavec d'autres outils pour la gestion des fenêtres:

Alors que la xdotoolsortie utilise des nombres décimaux pour les identifiants windwo, la plupart des autres outils utilisent des nombres hexadécimaux pour la sortie (ils prennent généralement en charge les deux pour l'entrée).

Par exemple, si vous trouvez une fenêtre avec xdotool getactivewindow, vous ne trouverez pas le résultat dans la sortie de xwininfo -root -tree, qui répertorie toutes les fenêtres. Il doit d'abord être converti en un nombre hexadécimal:

$ xdotool getactivewindow                              
69206716
$ printf 0x%x 69206716                  
0x42002bc
$ xwininfo -root -tree | grep 0x42002bc
           0x42002bc (has no name): ("konsole" "Konsole")  1154x781+0+0  +1289+498


Conversion décimale en hexadécimal:

printf 0x%x 69206716

Conversion hexadécimal en décimal:

printf %i 0x42002bc
Volker Siegel
la source
J'ai essayé la xdotool getactivewindowcommande et le problème est qu'elle n'imprime pas le résultat dans le terminal. Il enregistre le résultat dans la pile de fenêtres. Cette commande imprime un certain nombre mais ce n'est pas l'ID de fenêtre (par exemple 35651588)
Mariusz
Pourquoi pensez-vous que 35651588 n'est pas l'ID de la fenêtre?
Volker Siegel
Oui, je pense que 35651588 n'est pas l'identifiant de la fenêtre. Vous pouvez voir windows id par la commande xwininfo, par exemple xwininfo -root -tree- cette commande imprime toutes les fenêtres et les fenêtres ont un autre type de numérotation.
Mariusz
1
xwininfoaffiche l'id de la fenêtre sous forme de nombres hexadécimaux et xdotool affiche les nombres décimaux, mais c'est la même chose.
Volker Siegel
tu as raison. 35651588 = 0x2200004. xwininfo -root -tree | grep 2200004 0x2200004 "user@host:~": ("gnome-terminal" "Gnome-terminal") 1680x974+0+26 +0+51
Mariusz
1

Cette commande fonctionne pour moi

xdotool key --window "$(xdotool getactivewindow)" F5

xdotool version 3.20160805.1

Ahmed Habiba
la source
xdotool getactivewindow key F5devrait produire le même résultat
user3804598