我希望能够使用Python引发另一个应用程序的Window。
我确实看到了这一点,我想我可以尝试一下:
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(大概)或在外部GdkWindow上使用gdk_window_focus()来完成,使用GDK通过pygtk
_NET_ACTIVE_WINDOW优于XRaiseWindow(),并且已经存在于所有重要的WM中很多年了。
您应该避免XSetInputFocus()会导致问题(尤其是如果时间戳错误的话)。问题是WM无法截获SetInputFocus(),因此会导致奇怪的竞争条件和UI不一致。
确实只有_NET_ACTIVE_WINDOW可以正常工作,这就是为什么它被发明的原因,因为以前的破解很糟糕。
有一个名为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/