如何解决如果活动窗口在 linux 中发生变化,则执行 python 代码
我有以下代码使用无限循环来检查活动窗口是否已更改。此程序在活动窗口更改时打印当前窗口的名称。必须有更好的方法来做到这一点。如何让我的 python 代码始终在没有无限循环的情况下监听活动窗口的变化?
import subprocess
import psutil
pid = subprocess.check_output(["xdotool","getactivewindow","getwindowpid"]).decode("utf-8").strip()
prevpid=pid
print(pid)
while(True):
pid = subprocess.check_output(["xdotool","getwindowpid"]).decode("utf-8").strip()
if prevpid!=pid:
process=psutil.Process(int(pid))
processName=process.name()
print("Current Active Process is "+processName)
prevpid=pid
解决方法
如果你在 X 上,而不是轮询,最好使用 Wnck.Screen 的 active_window_changed
信号,从 Gtk 循环运行。举个简单的例子:
#!/usr/bin/env python3
import gi
gi.require_version('Gtk','3.0')
gi.require_version('Wnck','3.0')
from gi.repository import Gtk,Wnck
def dosomething(screen,previous_window):
try:
print(
previous_window.get_name(),"||",screen.get_active_window().get_name()
)
# or run any action
except AttributeError:
pass
wnck_scr = Wnck.Screen.get_default()
wnck_scr.force_update()
wnck_scr.connect("active-window-changed",dosomething)
Gtk.main()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。