如果窗口存在,如何检入xlib?

时间:2017-05-17 13:00:35

标签: c++ x11 xlib

我正在使用gcc在Linux中编写c ++库。 程序使用

在新的浏览器窗口中打开网页
system("firefox https://www.webpage.com");

之后我使用xlib来确定每个打开的浏览器窗口的标识符。 然后程序使用

逐个引发firefox窗口
XRaiseWindow(display, window)

为了制作每个窗口和OCR的屏幕截图。

但如果我手动关闭浏览器窗口并尝试使用 XRaiseWindow使用相应的标识符生成 BadWindow 错误并终止程序。

那么我如何检查xlib是否存在具有给定window标识符的窗口?

1 个答案:

答案 0 :(得分:1)

来自X FAQ

  
    

169)如何检查窗口ID是否有效?
    我的程序在远程显示器上有一个窗口的ID。     我想在做任何事之前检查窗口是否存在。

  
     

因为X是异步的,所以不能保证窗口   在您获得ID和您的时间之间仍然存在   将事件发送到窗口或以其他方式操纵它。你应该做什么   do是发送事件而不检查,但安装错误处理程序   捕获任何BadWindow错误,这表示窗口没有   更长的存在。除了[罕见]之外,这个方案将有效   原始窗口已被销毁,其ID重新分配给另一个窗口   窗口。

     

您可以使用此方案制作检查有效性的功能   窗户;您可以通过调用使此操作几乎同步   XSync()请求后,虽然仍无法保证   窗口将在结果后存在(除非抓住了消防员)。在   总的来说,抓住错误而不是预先检查是可取的。

长话短说:你不能:P你只能破坏控制。