Получите заголовок окна или имя приложения с Python

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

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

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

Спасибо

Информация о системе редактирования:

  • Python 2.7.6
  • Ubuntu 14.04 (Единица)
3
задан 16 November 2019 в 23:55

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. Методы окна.


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

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

xprop -root

дает Вам информацию об активном окне, a.o. идентификатор окна, и

wmctrl -l

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

например:

В python 3, с помощью подпроцесса check_output ():

Получить активное окно (идентификатор):

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

После того как мы имеем идентификатор окна, добираемся (pid) приложение, это принадлежит, с помощью wmctrl:

NB: сначала, мы должны "исправить" frontmost идентификатор (вывод) команды выше для wmctrl; идентификатор от wmctrl и xprop немного отличается:

0x381e427 (xprop)
0x0381e427 (wmctrl)

зафиксировать вывод функции выше (использование "frontmost" вывода # [1] или # [2]):

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

затем получите pid (приложение) frontmost окно:

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, с помощью подпроцесса. Popen ():

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

Получить активное окно (идентификатор):

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

4
ответ дан 1 December 2019 в 15:59

Другие вопросы по тегам:

Похожие вопросы: