我正在尝试编写一个程序,使用 Xlib 跟踪活动窗口何时发生变化。我很难找出最好的方法来做到这一点。到目前为止,这些是我的想法:
- 每秒使用 _NET_ACTIVE_WINDOW 获取活动窗口,如果它已更改,则运行该事件的相关代码。
- 获取所有窗口的列表并聆听它们在事件中的焦点。不过,我必须弄清楚如何保持打开窗口的最新列表。
他们是更简单/更好的方法吗?我是 Xlib 编程新手。
这是 @alanc 提议的 Python 实现。
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
我作为某人的示例编写的更完整注释的版本位于这个要点.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)