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