J'essaie d'obtenir le titre de la fenêtre active. L'application est une tâche d'arrière-plan, donc si l'utilisateur a Eclipse ouverte, la fonction retourne "Eclipse - blabla", donc elle n'obtient pas le titre de la fenêtre de ma propre fenêtre. Je développe ceci dans Python 2.6 using PyQt4.Obtenir le titre de la fenêtre active dans X
Ma solution actuelle, empruntée et légèrement modifiée d'une ancienne réponse ici à SO, ressemble à ceci:
def get_active_window_title():
title = ''
root_check = ''
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]:
return j.split("= ")[1].strip(' \n\"')
Il fonctionne pour la plupart des fenêtres, mais pas tous. Par exemple, il ne peut pas trouver mes fenêtres de discussion kopete ou le nom de l'application que je suis en train de développer.
Mon prochain essai ressemble à ceci:
def get_active_window_title(self):
screen = wnck.screen_get_default()
if screen == None:
return "Could not get screen"
window = screen.get_active_window()
if window == None:
return "Could not get window"
title = window.get_name()
return title;
Mais pour une raison quelconque fenêtre est toujours Aucun.
Est-ce que quelqu'un a une meilleure façon d'obtenir le titre de fenêtre en cours, ou comment modifier l'un de mes moyens, qui fonctionne pour toutes les fenêtres?
Edit:
En cas de personne se demande c'est la manière que je trouvais cela semble fonctionner pour toutes les fenêtres.
def get_active_window_title(self):
root_check = ''
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)
id_w.wait()
buff = []
for j in id_w.stdout:
buff.append(j)
for line in buff:
match = re.match("WM_NAME\((?P<type>.+)\) = (?P<name>.+)", line)
if match != None:
type = match.group("type")
if type == "STRING" or type == "COMPOUND_TEXT":
return match.group("name")
return "Active window not found"
est là dans un but de copier stdout à root_check si stdout est non vide? – enthdegree
jetez un coup d'œil à la solution d'Alex Spurlings, il a retiré cette partie. – dutt