gpt4 book ai didi

c++ - 如果窗口存在,我如何 checkin xlib?

转载 作者:行者123 更新时间:2023-11-30 05:13:16 25 4
gpt4 key购买 nike

我正在使用 gcc 在 Linux 中编写 C++ 库。程序在新的浏览器窗口中打开网页

system("firefox https://www.webpage.com");

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

一个一个地提升 firefox 窗口
XRaiseWindow(display, window)

为了对每个窗口进行截图和OCR。

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

如果存在具有给定 window 标识符的窗口,我该如何检查 xlib?

最佳答案

来自X FAQ :

169) How do I check whether a window ID is valid?
My program has the ID of a window on a remote display. I want to check whether the window exists before doing anything with it.

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

您可以使用此方案制作一个检查有效性的函数 window 的;您可以通过调用使此操作几乎同步 XSync() 请求之后,虽然仍然不能保证 窗口将在结果之后存在(除非服务器被捕获)。在 总的来说,捕获错误比预先检查更可取。

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

关于c++ - 如果窗口存在,我如何 checkin xlib?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44025639/

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