目前我在 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)