Je travaille avec le multitouch et j'essaie de faire différentes choses sur différentes applications avec les mêmes gestes.
J'ai un script python, travaux de base.
Comment puis-je choisir entre les applications? Comment obtenir le titre de la fenêtre active?
Merci
Modifier les informations système:
Je voudrais simplement analyser le résultat de xprop
ou xwit
et wmctrl
(vous devrez peut-être installer wmctrl
d'abord: Sudo apt-get install wmctrl
). xprop donne beaucoup d'informations sur les fenêtres.
xprop -root
vous donne des informations sur la fenêtre active, a.o. l'identifiant de la fenêtre, et
wmctrl -l
vous donne une liste des fenêtres actuellement ouvertes. L'utilisation de l'option -p
vous donne également des informations sur les pids auxquels les fenêtres appartiennent. Ensemble, vous pouvez obtenir toutes les informations dont vous avez besoin.
par exemple:
Pour obtenir la fenêtre active (id):
- en utilisant xprop
# [1]
import subprocess
command = "xprop -root _NET_ACTIVE_WINDOW | sed 's/.* //'"
frontmost = subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8").strip()
print(frontmost)
> 0x38060fd
- en utilisant xprop, en le analysant "à l'intérieur" de python
# [2]
import subprocess
command = "xprop -root _NET_ACTIVE_WINDOW"
frontmost = subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8").strip().split()[-1]
print(frontmost)
> 0x38060fd
Une fois que nous avons l'identifiant de la fenêtre, récupérez le (pid de) l'application à laquelle il appartient, en utilisant wmctrl:
NB: il faut d’abord "corriger" l’identifiant (sortie) le plus en avant de la commande ci-dessus pour wmctrl; l'id de wmctrl et xprop diffère légèrement:
0x381e427 (xprop)
0x0381e427 (wmctrl)
pour corriger la sortie de la fonction ci-dessus (en utilisant la sortie "la plus en avant" de # [1]
ou # [2]
):
fixed_id = frontmost[:2]+"0"+frontmost[2:]
puis obtenez le pid de la (application de) la fenêtre la plus en avant:
command = "wmctrl -lp"
window_pid = [l.split()[2] for l in subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8").splitlines() if fixed_id in l][0]
> 6262
Dans python 2, le sous-processus.check_output n'est pas disponible, la procédure est donc légèrement différente et un peu plus détaillée:
Pour obtenir la fenêtre active (id):
- en utilisant xprop
# [1]
import subprocess
command = "xprop -root _NET_ACTIVE_WINDOW"
output = subprocess.Popen(["/bin/bash", "-c", command], stdout=subprocess.PIPE)
frontmost = output.communicate()[0].decode("utf-8").strip().split()[-1]
print frontmost
> 0x38060fd
pour obtenir le (pid de) l'application à laquelle il appartient, en utilisant wmctrl et le résultat de # [1]
- (encore) en utilisant (et en corrigeant) la sortie de [1]
:
# [2]
import subprocess
fixed_id = frontmost[:2]+"0"+frontmost[2:]
command = "wmctrl -lp"
output = subprocess.Popen(["/bin/bash", "-c", command], stdout=subprocess.PIPE)
window_pid = [l.split()[2] for l in output.communicate()[0].decode("utf-8").splitlines() if fixed_id in l][0]
print window_pid # pid of the application
> 6262
pour obtenir le nom de la fenêtre , en utilisant wmctrl
et la sortie de # [1]
(en utilisant également socket.gethostname()
pour diviser la sortie de wmctrl
par nom de machine)
# [3]
import subprocess
import socket
command = "wmctrl -lp"
output = subprocess.Popen(["/bin/bash", "-c", command], stdout=subprocess.PIPE)
window_list = output.communicate()[0].decode("utf-8")
window_name = [l for l in window_list.split("\n") if fixed_id in l][0].split(socket.gethostname()+" ")[-1]
print window_name