Resposta antiga:

Resposta antiga:

Estou trabalhando com multitoque e tento fazer coisas diferentes em aplicativos diferentes com os mesmos gestos.

Eu tenho um script python, funciona básico.

Bot, como posso decidir entre os aplicativos? Como obter o título da janela ativa?

Obrigado

Editar informações do sistema:

  • Pitão 2.7.6
  • Ubuntu 14.04 (Unidade)

Responder1

Abaixo versão atualizada. Vou deixar a resposta antiga, para não retirar a resposta que obteve os votos.

#!/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())

ou obtenha xid:

print(scr.get_active_window().get_xid())

ou (não muito surpreendente) obtenha pid:

print(scr.get_active_window().get_pid())

Veja também aqui para obterMétodos Wnck.Window.


Resposta antiga:

Eu apenas analisaria a saída de or xprope xwit( wmctrltalvez seja necessário instalar wmctrlprimeiro: sudo apt-get install wmctrl). xprop dábastantede informações nas janelas.

xprop -root

fornece informações sobre a janela ativa, o ID da janela e

wmctrl -l

fornece uma lista das janelas abertas no momento. Usar a -popção também fornece informações sobre os pids aos quais as janelas pertencem. Combinados, você pode obter todas as informações que precisa.

por exemplo:

Em python 3, usando o subprocesso check_output():

Para obter a janela ativa (id):

-usando 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

-usando xprop, analisando-o "dentro" do 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

Assim que tivermos o window-id, obtenha o (pid do) aplicativo ao qual ele pertence, usando wmctrl:

NB: primeiro, temos que "consertar" o id (saída) mais frontal do comando acima para wmctrl; o id de wmctrl e xprop difere ligeiramente:

0x381e427 (xprop)
0x0381e427 (wmctrl)

para corrigir a saída da função acima (usando a saída "mais frontal" de # [1]or # [2]):

fixed_id = frontmost[:2]+"0"+frontmost[2:]

em seguida, obtenha o pid da (aplicação da) janela frontal:

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


Em python 2, usando subprocess.Popen():

No python 2, subprocess.check_output não está disponível, então o procedimento é um pouco diferente e um pouco mais detalhado:

Para obter a janela ativa (id):

-usando 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

para obter o (pid do) aplicativo ao qual pertence, usando wmctrl e a saída de# [1]

-(novamente) usando (e corrigindo) a saída 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

para pegar a janelanome, usando wmctrle a saída de # [1] (também usando socket.gethostname()para dividir a saída wmctrlpor nome da máquina)

# [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

homem xprop
homem wmctrl
cara xwit

informação relacionada