gpt4 book ai didi

python - X11 - 如何使用 Python 提升另一个应用程序的窗口

转载 作者:太空狗 更新时间:2023-10-29 20:44:23 25 4
gpt4 key购买 nike

我希望能够使用 Python 引发另一个应用程序的窗口。

我确实看到了这个,我想我可以试试:

X11: raise an existing window via command line?

但是,如果可能的话,我更愿意用 Python 来完成。

最佳答案

要激活另一个窗口,在 Xlib 协议(protocol)层上正确的做法是发送一条 _NET_ACTIVE_WINDOW 消息,如 EWMH 规范中所述 http://standards.freedesktop.org/wm-spec/wm-spec-1.3.html

这可以通过 python-xlib(大概)或通过 pygtk 使用 GDK 在外部 GdkWindow 上使用 gdk_window_focus() 来完成

_NET_ACTIVE_WINDOW 优于 XRaiseWindow() 并且多年来一直在所有重要的 WM 中。

您应该避免使用 XSetInputFocus(),因为它会导致问题(尤其是在您弄错时间戳的情况下)。问题是 WM 无法拦截 SetInputFocus(),因此它会导致奇怪的竞争条件和 UI 不一致。

实际上只有 _NET_ACTIVE_WINDOW 可以正常工作,这就是发明它的原因,因为以前的 hack 很糟糕。

有一个名为 libwnck 的库可以让你激活窗口(除其他外),但不幸的是它增加了很多开销,因为它总是跟踪来自任何应用程序的所有打开的窗口,即使你不需要这样做.但是,如果您想无论如何跟踪来自其他应用程序的窗口,那么 libwnck 有一个函数可以激活那些做正确事情的窗口,这将是一个不错的选择。

严格正确的方法是检查 EWMH _NET_ACTIVE_WINDOW 支持(EWMH 记录了如何执行此操作),如果 WM 没有 _NET_ACTIVE_WINDOW,则回退到 XRaiseWindow。然而,由于在过去多年中积极致力于开发的任何 WM 都具有 EWMH,因此许多人对遗留 WM 的回退感到懒惰。

关于python - X11 - 如何使用 Python 提升另一个应用程序的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2676434/

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