小编Chr*_*son的帖子

我可以在没有轮询的情况下对窗口打开的事件采取行动吗?

我试图找到一种方法来检测在 Ubuntu 16.04 中打开的窗口(任何窗口)的事件

我希望能够检测到“窗口打开”事件并检查打开的窗口是否是我想要的窗口,然后运行 ​​bash 脚本或 C/C++ 函数。

到目前为止,我发现我可以使用它wmctrl -l来查找已经打开的窗口。我可以使用这个命令,也许grep可以找到我寻找的窗口是否打开,然后根据这些信息采取行动。

我不想轮询,因为我不希望应用程序在窗口打开时处于空闲状态。动作应该尽可能“即时”。

是否有我可以监听的事件或信号来实现这一目标?从内核、窗口管理器 (Compiz) 或某些更改的日志文件?

编辑: 澄清一下,我有一个应用程序(不在我的控制之下)它可能随时显示一个窗口,这个窗口没有标题但它确实设置了 WM_CLASS(WM_CLASS 对于应用程序的所有窗口都是相同的)。我想根据显示(或创建)该窗口的事件采取行动,以最好/更容易的为准。

该窗口似乎不是在主应用程序窗口“内”打开的。使用xwininfo -children -id <window-id>显示主应用程序和搜索窗口位于不同的分支上,连接到“根窗口”。

分支看起来像这样,其中 R 是“根节点”;A 是主应用程序分支的根节点,Y 是具有搜索窗口 W 的分支的根节点:

    R
   / \
  A   Y
 /\    \
B  C    X
    \    \
     Q    W
Run Code Online (Sandbox Code Playgroud)

所以我希望我能找到 YXW 的独特结构

我不确定我是否必须听所有窗口,但我假设我必须检查“根窗口”中发生的情况并尝试找到寻找的窗口。

bash events window c c++

13
推荐指数
1
解决办法
3024
查看次数

标签 统计

bash ×1

c ×1

c++ ×1

events ×1

window ×1