我正在为 Linux 开发基于 Motif 的旧应用程序。我希望能够以编程方式更改我们应用程序的活动窗口。我可以使用 XSetInputFocus() 函数重定向输入并且键盘输入开始到那里,但是 XReconfigureWMWindow() 和 XRaiseWindow() 函数不起作用。
我读过窗口管理器试图阻止这种行为,所以试图禁用配置重定向,但这也不起作用。任何想法如何在窗口堆栈顶部制作我自己的窗口之一?
有一个名为wmctrl的小程序可用(至少在 Debian/Ubuntu 中它是标准发行版),它能够在 Windows 和桌面上执行许多操作,并处理大量的窗口管理器。我建议测试它是否适用于您的环境,如果可以,请查看其来源。
您可能会发现这个问题的答案取决于用户正在使用的窗口管理器,甚至取决于他们为窗口管理器提供的设置。我喜欢将我的窗口管理器设置为“焦点跟随鼠标”,这意味着你不能将焦点发送到我没有把鼠标放在上面的窗口,除非你也在那里扭曲鼠标(那个函数叫做 XWarpMouse ?)。