Python получает имя приложения переднего плана в Ubuntu 19.10

В настоящее время я использую Python 3 в Ubuntu 19.10. Я пробовал установить wnck и потерпели неудачу.

Я работаю над проектом на основе жестов, в котором я хочу назначить одному жесту разные команды для разных приложений. Есть ли способ получить только имя приложения, а НЕ заголовок окна, поскольку он изменяется для одного и того же приложения (например, Chrome).

Ниже приведен код, который я нашел в Интернете, который помогает извлечь заголовок окна. Я хотел бы использовать тот же код, но печатать имя приложения, а не заголовок окна. Спасибо.

import sys
import os
import subprocess
import re

def get_active_window_title():
    root = subprocess.Popen(['xprop', '-root', '_NET_ACTIVE_WINDOW'], stdout=subprocess.PIPE)
    stdout, stderr = root.communicate()
    m = re.search(b'^_NET_ACTIVE_WINDOW.* ([\w]+)$', stdout)
    if m != None:
        window_id = m.group(1)
        window = subprocess.Popen(['xprop', '-id', window_id, 'WM_NAME'], stdout=subprocess.PIPE)
        stdout, stderr = window.communicate()
    else:
        return None

    match = re.match(b"WM_NAME\(\w+\) = (?P<name>.+)$", stdout)
    if match != None:
        return match.group("name").strip(b'"')

    return None

if __name__ == "__main__":
    try:
        while True:
            print(get_active_window_title())
    except KeyboardInterrupt:
        pass

1 ответ

Решение

Вам просто нужно изменить две строки:

  • + Изменить

    window = subprocess.Popen(['xprop', '-id', window_id, 'WM_NAME'], stdout=subprocess.PIPE)
    

    к

    window = subprocess.Popen(['xprop', '-id', window_id, 'WM_CLASS'], stdout=subprocess.PIPE)
    
  • + Изменить

    match = re.match(b"WM_NAME\(\w+\) = (?P<name>.+)$", stdout)
    

    к

    match = re.match(b'WM_CLASS\(\w+\) = ".*", (?P<name>.+)$', stdout)
    
Другие вопросы по тегам