gpt4 book ai didi

Python - 如何在 Ubuntu 上获取焦点窗口的进程名称?(不是窗口标题)

转载 作者:太空宇宙 更新时间:2023-11-04 03:49:18 28 4
gpt4 key购买 nike

我正在写一个脚本,记录我每天花在每个应用程序上的时间。但我不知道如何获得我关注的过程及其名称。我怎样才能做到这一点?顺便说一句,我看到了很多获取焦点窗口 ID 的方法。我可以用它来获取进程名称吗?

最佳答案

你想要的是使用python-xlib你想在哪里查找events .

作为用法示例,我用它来创建kitt在 Xorg 上处理多点触控手势的东西:

代码如下:

from Xlib import X, XK, protocol, display, Xcursorfont
from Xlib.ext import xtest
from Xlib.protocol import request

disp = display.Display()

root = disp.screen().root
pointer_info = request.QueryPointer(display = disp.display,
window = root)
root_xpos, root_ypos = (pointer_info._data['root_x'], pointer_info._data['root_y'])
targetwindow = disp.get_input_focus().focus

现在一旦你得到了targetwindow,你就可以在上面得到很多东西,比如id。

现在,回到您的问题“如何获取窗口的 PID”,答案是不太可能,因为 several reasons ,尽管有一些技巧。

这些 hacks 背后的想法是,虽然您无法分辨确切 进程(以及它的 PID)正在运行该窗口,但您可以知道它的全名。你不能,因为 Xorg 是一个客户端-服务器系统,在该系统中,应用程序可以是在远程计算机上运行的进程,该进程可以与本地进程具有相同的 PID。但是,黑客的想法是获取程序的全名(使用 WM_CLASS 属性)并从进程列表中猜测 PID。

最明显的,使用xprop

ps -o pid,comm,args $(xprop -id $(xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}") -f _NET_WM_PID 0c " \$0\\n" _NET_WM_PID | awk "{print \$2}")

xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) _NET_WM_NAME WM_CLASS

甚至使用 xdotool .

但是,回到我们正在使用的 Xlib,我很确定它可以使用代码来实现喜欢that one ,虽然我没有现成的代码,但您必须在那里检查 WM_CLASS 属性。它将包含进程列表中显示的应用程序名称... tada\o/

HTH

关于Python - 如何在 Ubuntu 上获取焦点窗口的进程名称?(不是窗口标题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22099987/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com