如果linux中的活动窗口发生更改,则执行python代码

2024-10-01 00:31:37 发布

您现在位置: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", "getactivewindow", "getwindowpid"]).decode("utf-8").strip()
    if prevpid!=pid:
        process=psutil.Process(int(pid))
        processName=process.name()
        print("Current Active Process is "+processName)
        prevpid=pid

Tags: 代码importoutputcheckpidutfpsutilsubprocess
1条回答
网友
1楼 · 发布于 2024-10-01 00:31:37

如果您在X上,而不是轮询,那么最好使用从Gtk循环运行的Wnck.Screenactive_window_changed信号。在一个简单的例子中:

#!/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()

相关问题 更多 >