Python 在 Ubuntu 19.10 中获取前台应用程序名称

Python 在 Ubuntu 19.10 中获取前台应用程序名称

目前我在 Ubuntu 19.10 上使用 Python 3。我尝试安装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)
    

相关内容