Antigua respuesta:

Antigua respuesta:

Estoy trabajando con multitáctil e intento hacer diferentes cosas en diferentes aplicaciones con los mismos gestos.

Tengo un script en Python, trabajos básicos.

Bot, ¿cómo puedo decidir entre las aplicaciones? ¿Cómo obtener el título de la ventana activa?

Gracias

Editar información del sistema:

  • Pitón 2.7.6
  • Ubuntu 14.04 (Unidad)

Respuesta1

A continuación la versión actualizada. Dejaré la respuesta anterior para no eliminar la respuesta que obtuvo los 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())

o obtener xid:

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

o (no muy sorprendente) obtener pid:

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

Consulte también aquí para obtenerMétodos Wnck.Window.


Antigua respuesta:

Simplemente analizaría la salida de o xpropy xwit( wmctrles posible que tengas que instalar wmctrlprimero sudo apt-get install wmctrl:). xprop damuchode información en windows.

xprop -root

le brinda información sobre la ventana activa, así como la identificación de la ventana, y

wmctrl -l

le proporciona una lista de las ventanas abiertas actualmente. El uso de la -popción también le brinda información sobre los pids a los que pertenecen las ventanas. Combinados puedes obtener toda la información que necesitas.

Por ejemplo:

En Python 3, usando el subproceso check_output():

Para obtener la ventana activa (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, analizándolo "dentro" de 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

Una vez que tengamos el window-id, obtenemos el (pid de) la aplicación a la que pertenece, usando wmctrl:

NB: primero, tenemos que "arreglar" la identificación frontal (salida) del comando anterior para wmctrl; la identificación de wmctrl y xprop difiere ligeramente:

0x381e427 (xprop)
0x0381e427 (wmctrl)

para arreglar la salida de la función anterior (usando la salida "frontal" de # [1]o # [2]):

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

luego obtenga el pid de la (aplicación de la) ventana 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


En Python 2, usando subprocess.Popen():

En Python 2, subprocess.check_output no está disponible, por lo que el procedimiento es ligeramente diferente y un poco más detallado:

Para obtener la ventana activa (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 obtener el (pid de la) aplicación a la que pertenece, usando wmctrl y la salida de# [1]

-(nuevamente) usando (y arreglando) la salida 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 conseguir la ventananombre, usando wmctrly la salida de # [1] (también usando socket.gethostname()para dividir la salida de wmctrlpor nombre de 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

hombre xprop
hombre wmctrl
hombre xingenio

información relacionada