Старый ответ:

Старый ответ:

Я работаю с мультитачем и пытаюсь делать разные вещи в разных приложениях с помощью одних и тех же жестов.

У меня есть скрипт на Python, базовый работает.

Бот как мне выбрать между приложениями? Как получить заголовок активного окна?

Спасибо

Редактировать информацию о системе:

  • Питон 2.7.6
  • Ubuntu 14.04 (Единство)

решение1

Ниже обновленная версия. Я оставлю старый ответ, чтобы не удалять ответ, который получил голоса.

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

или получить xid:

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

или (что не очень удивительно) получить pid:

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

Также смотрите здесь, чтобы получитьМетоды Wnck.Window.


Старый ответ:

Я бы просто проанализировал вывод либо xprop, либо xwitи (возможно, вам сначала wmctrlпридется установить : ). xprop даетwmctrlsudo apt-get install wmctrlмногоинформации на окнах.

xprop -root

дает вам информацию об активном окне, а также идентификатор окна и

wmctrl -l

дает вам список открытых в данный момент окон. Использование -pопции также дает вам информацию о pid, к которым принадлежат окна. В совокупности вы можете получить всю необходимую информацию.

например:

В Python 3, используя подпроцесс check_output():

Чтобы получить активное окно (id):

-с использованием 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

-используя xprop, анализируя его «внутри» 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

Получив идентификатор окна, с помощью wmctrl получаем идентификатор процесса (pid) приложения, к которому оно принадлежит:

Примечание: во-первых, нам нужно «исправить» самый первый идентификатор (вывод) команды выше для wmctrl; идентификатор из wmctrl и xprop немного отличается:

0x381e427 (xprop)
0x0381e427 (wmctrl)

чтобы исправить вывод функции выше (используя «самый передний» вывод # [1]или # [2]):

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

затем получите pid (приложения) самого переднего окна:

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


В Python 2, используя subprocess.Popen():

В Python 2 subprocess.check_output недоступен, поэтому процедура немного отличается и более многословна:

Чтобы получить активное окно (id):

-с использованием 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

чтобы получить (pid) приложения, к которому он принадлежит, используя wmctrl и вывод# [1]

-(снова) используем (и исправляем) вывод [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

чтобы получить окноимя, используя wmctrlи вывод # [1] (также используя socket.gethostname()для разделения вывода wmctrlпо имени машины)

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

человек xprop
человек wmctrl
человек остроумный

Связанный контент