簡體   English   中英

如果 linux 中的 window 更改處於活動狀態,則執行 python 代碼

[英]Execute python code if active window change in linux

我有以下代碼使用無限循環來檢查活動 window 是否已更改。當活動 window 更改時,此程序會打印當前 window 的名稱。 必須有更好的方法來做到這一點。 如何在沒有無限循環的情況下讓我的 python 代碼始終監聽活動的 window 變化?

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

如果您在 X 上,而不是輪詢,最好使用Wnck.Screenactive_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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM