我试图找到一种方法来检测在 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 的独特结构
我不确定我是否必须听所有窗口,但我假设我必须检查“根窗口”中发生的情况并尝试找到寻找的窗口。