繁体   English   中英

捕获活动窗口中的更改(适用于Linux)

[英]Capture change in active window (for linux)

有没有办法知道(linux x windows)用户何时通过alt-tab或单击更改活动窗口。 我想编写一个侦听此事件的脚本(如果发生这样的事件,脚本会继续查找当前活动窗口 - 我知道如何解决)。 我还可以继续轮询以找到当前活动的窗口,但这是一个不好的方式来写这个。 希望得到一个可以“倾听”而非“轮询”的解决方案。

谢谢!

只需简单地查看Perl模块X11 :: Tops的文档,就会发现有一个monitor_property_and_structure_change方法。 因此我猜测底层的X11库将提供您正在寻找的功能。

我需要这样做,我的解决方案是在根窗口上观察_NET_ACTIVE_WINDOW属性(由Window Manager维护)以进行更改。

这是我编写的python-xlib实现的副本,用于向某人演示:

import Xlib
import Xlib.display

disp = Xlib.display.Display()
root = disp.screen().root

NET_ACTIVE_WINDOW = disp.intern_atom('_NET_ACTIVE_WINDOW')
NET_WM_NAME = disp.intern_atom('_NET_WM_NAME')

last_seen = {'xid': None}
def get_active_window():
    window_id = root.get_full_property(NET_ACTIVE_WINDOW,
                                       Xlib.X.AnyPropertyType).value[0]

    focus_changed = (window_id != last_seen['xid'])
    last_seen['xid'] = window_id

    return window_id, focus_changed

def get_window_name(window_id):
    try:
        window_obj = disp.create_resource_object('window', window_id)
        window_name = window_obj.get_full_property(NET_WM_NAME, 0).value
    except Xlib.error.XError:
        window_name = None

    return window_name


if __name__ == '__main__':
    root.change_attributes(event_mask=Xlib.X.PropertyChangeMask)
    while True:
        win, changed = get_active_window()
        if changed:
            print(get_window_name(win))

        while True:
            event = disp.next_event()
            if (event.type == Xlib.X.PropertyNotify and
                    event.atom == NET_ACTIVE_WINDOW):
                break

更充分评论的版本就在这个要点中

我知道KTimeTracker KDE程序跟踪你在每个窗口花了多少时间。 我不知道细节 - 它是否跟踪更改活动窗口的事件,或只是定期检查整个桌面的状态。 然而,消息来源可能会有所帮助: http//www.kde.org/applications/utilities/ktimetracker/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM