gpt4 book ai didi

c - xlib 是否有事件窗口事件?

转载 作者:IT王子 更新时间:2023-10-29 01:19:15 25 4
gpt4 key购买 nike

我正在尝试使用 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

我为某人编写的注释更完整的版本在 this gist 中.

关于c - xlib 是否有事件窗口事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5262413/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com