2010-08-23 32 views
3

Après que stackoverflow a répondu à ma question précédente ici sur mon Wiimote gauche/clic droit, non seulement je peux déplacer le curseur de la souris, je peux maintenant faire un clic gauche/droit sur les choses. J'ai maintenant une autre question.Xorg, Python, et la fenêtre courante Titre

Que dois-je utiliser en python pour obtenir le titre de la fenêtre active? Après avoir tapé 'X11 Python Window Title', 'Linux Python Window Title' et des choses similaires, tout ce que j'ai trouvé est win32 et tkinker (encore?), Ce qui n'est pas ce dont j'ai besoin.

Si vous pouviez aider, ce serait génial!

Répondre

12

EDIT

meilleure façon:

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() 

manière alternative:

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 
+0

cela me donne seulement le titre de la fenêtre sur laquelle il fonctionne. :( – dbdii407

+0

juste mettre un temps.sleep et changer pour l'autre fenêtre et vous obtiendrez le titre de la fenêtre en cours.Cela obtenir le titre de la fenêtre en cours, et pas seulement la fenêtre où il fonctionne – killown

+0

En fait, j'ai fait une fois. sommeil (3), il était toujours le même titre – dbdii407

0

Le problème est de savoir quelle fenêtre est active ou quel est le titre? Obtenir le titre d'une fenêtre est facile:

MainWindow.title() 

, où MainWindow est le nom de la fenêtre. Aucune idée sur la fenêtre active si. Jamais eu plusieurs fenêtres.

+0

Je dois obtenir le nom de la fenêtre active, l'un au premier plan – dbdii407

0

Je pense que python-wnck pourrait être utile si vous voulez gérer les espaces de travail de Windows & & tels. Je ne peux pas trouver les docs Python immédiatement, mais selon les docs pour la librairie C libwnck qu'il enveloppe, il a une méthode wnck_screen_get_active_window().

4

solution à base de xprop-de killown peut être compacté en une seule (si longue) déclaration:

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] 
0

Ma solution:

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()