Ich arbeite mit Multitouch und versuche, mit denselben Gesten unterschiedliche Dinge in unterschiedlichen Anwendungen zu tun.
Ich habe ein Python-Skript, das grundlegend funktioniert.
Aber wie entscheide ich mich zwischen den Anwendungen? Wie erhalte ich den aktiven Fenstertitel?
Danke
Systeminformationen bearbeiten:
- Python 2.7.6
- Ubuntu 14.04 (Unity)
Antwort1
Nachfolgend die aktualisierte Version. Ich lasse die alte Antwort stehen, um die Antwort, die die Stimmen bekommen hat, nicht zu entfernen.
#!/usr/bin/env python3
import gi
gi.require_version("Wnck", "3.0")
from gi.repository import Wnck
scr = Wnck.Screen.get_default()
scr.force_update()
print(scr.get_active_window().get_name())
oder holen Sie sich xid:
print(scr.get_active_window().get_xid())
oder (nicht sehr überraschend) get pid:
print(scr.get_active_window().get_pid())
Siehe auch hier, umWnck.Window-Methoden.
Alte Antwort:
Ich würde einfach die Ausgabe von entweder xprop
oder xwit
und analysieren wmctrl
(Sie müssen möglicherweise wmctrl
zuerst installieren sudo apt-get install wmctrl
:). xprop gibteine Mengevon Informationen zu Fenstern.
xprop -root
gibt Ihnen Informationen über das aktive Fenster, ua die Fenster-ID und
wmctrl -l
gibt Ihnen eine Liste der aktuell geöffneten Fenster. Wenn Sie diese -p
Option verwenden, erhalten Sie auch Informationen zu den PIDs, zu denen die Fenster gehören. In Kombination erhalten Sie alle Informationen, die Sie benötigen.
Zum Beispiel:
In Python 3 mithilfe des Unterprozesses check_output():
So erhalten Sie das aktive Fenster (ID):
-mit 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
-mit xprop, Parsen "innerhalb" von 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
Sobald wir die Fenster-ID haben, holen Sie sich mit wmctrl die (PID) der Anwendung, zu der sie gehört:
NB: Zuerst müssen wir die vorderste ID (Ausgabe) des obigen Befehls für wmctrl „korrigieren“. Die ID von wmctrl und xprop unterscheidet sich geringfügig:
0x381e427 (xprop)
0x0381e427 (wmctrl)
um die Ausgabe der obigen Funktion zu korrigieren (unter Verwendung der „vordersten“ Ausgabe von # [1]
oder # [2]
):
fixed_id = frontmost[:2]+"0"+frontmost[2:]
dann holen Sie sich die PID des (der Anwendung des) vordersten Fensters:
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
In Python 2 mit subprocess.Popen():
In Python 2 ist subprocess.check_output nicht verfügbar, daher ist das Verfahren etwas anders und etwas ausführlicher:
So erhalten Sie das aktive Fenster (ID):
-mit 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
um die (PID der) Anwendung zu erhalten, zu der es gehört, mit wmctrl und der Ausgabe von# [1]
-(erneut) Verwenden (und Korrigieren) der Ausgabe von [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
um das Fenster zu bekommenName, mit wmctrl
und der Ausgabe von # [1]
(auch mit socket.gethostname()
zum Aufteilen der Ausgabe von wmctrl
nach Maschinennamen)
# [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