Frage

Nach Stackoverflow meine vorherige Frage beantwortet hier über meine Wiimote nach links / rechts klicken Frage, kann ich bewegen nicht nur den Mauszeiger, kann ich jetzt nach links / rechts, klicken Sie auf die Dinge. Ich habe jetzt noch eine Frage.

Was kann ich in Python verwende den Titel des aktiven Fensters zu bekommen? Nach googeln 'X11 Python Window Title', 'Linux Python Window Title' und die Dinge ähnlich, Alles, was ich gefunden habe ist win32 und tkinker (wieder?), Was nicht das, was ich brauche.

Wenn Sie helfen können, das wäre genial!

War es hilfreich?

Lösung

Bearbeiten

beste Art und Weise:

import gtk
import wnck
import glib

class WindowTitle(object):
    def __init__(self):
        self.title = None
        glib.timeout_add(100, self.get_title)

    def get_title(self):
        try:
            title = wnck.screen_get_default().get_active_window().get_name()
            if self.title != title:
                self.title  = title
                print title
        except AttributeError:
            pass
        return True

WindowTitle()
gtk.main()

Alternative Art und Weise:

from subprocess import PIPE, Popen
import time

title = ''
root_check = ''

while True:
    time.sleep(0.6)
    root = Popen(['xprop', '-root'],  stdout=PIPE)

    if root.stdout != root_check:
        root_check = root.stdout

        for i in root.stdout:
            if '_NET_ACTIVE_WINDOW(WINDOW):' in i:
                id_ = i.split()[4]
                id_w = Popen(['xprop', '-id', id_], stdout=PIPE)

        for j in id_w.stdout:
            if 'WM_ICON_NAME(STRING)' in j:
                if title != j.split()[2]:
                    title = j.split()[2]
                    print "current window title: %s" % title

Andere Tipps

killown die xprop-basierte Lösung kann in eine einzige (wenn auch langwierigen) Aussage verdichtet werden:

import subprocess
def GetActiveWindowTitle():
    return subprocess.Popen(["xprop", "-id", subprocess.Popen(["xprop", "-root", "_NET_ACTIVE_WINDOW"], stdout=subprocess.PIPE).communicate()[0].strip().split()[-1], "WM_NAME"], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0].strip().split('"', 1)[-1][:-1]

Ist das Problem, um herauszufinden, welches Fenster aktiv ist oder was der Titel? Erster Titel eines Fensters ist einfach:

MainWindow.title()

, wobei Mainwindow ist der Name des Fensters. Keine Ahnung über aktive Fenster though. Nie mehrere Fenster hat.

Ich denke, python-wnck nützlich sein könnte, wenn Sie Windows & Workspaces und so zu handhaben wollen. Ich kann die Python-Dokumentation findet sofort, sondern nach der docs für die libwnck C-Bibliothek, dass es hüllt, hat es eine wnck_screen_get_active_window () Methode.

Meine Lösung:

import wnck
disp=Display()
default_screen=wnck.screen_get_default()
default_screen.force_update()

active_window=disp.create_resource_object('window', default_screen.get_active_window().get_xid())
title=active_window.get_wm_name()

Ich habe bemerkt, dass wnck erfordert GTK Ereignisschleife um das aktive Fenster zu aktualisieren. Es gibt kein solches Problem mit Xlib:

import Xlib
import Xlib.display
disp = Xlib.display.Display()
window = disp.get_input_focus().focus

# Get active window class and name
window.get_wm_class()
window.get_wm_name()
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top