检索刚刚启动的 GUI 程序的 X11 窗口 ID

检索刚刚启动的 GUI 程序的 X11 窗口 ID

我想检索在后台启动的 GUI 程序的 X id,以便处理它们的 Windows 属性。到目前为止我一直在使用这个解决方法:

myprogram &
sleep 1
winID=$(wmctrl -l | awk '/./{line=$0} END{print $1;}')

但这依赖于三个重要假设:

  • 该程序将花费不到 1 秒的时间来打开窗口(更不用说少于 1 秒可能太长了)
  • wmctrl该窗口将附加在列表的末尾
  • 同时不会打开其他窗口

myprogram打开窗口后是否会发送任何信号?我怎样才能拦截它?

答案1

为了在我的程序中获取窗口 ID,我让程序将标题设置为唯一的内容,然后让程序启动wmctrl并解析其输出(而不是启动程序的 shell 脚本),然后报告窗口 ID(大多数通常通过文件)。

由于程序在窗口打开后才会继续,因此您无需等待太长时间。

这当然要求您可以更改myprogram(即从源代码编译)。

答案2

使用python gi库,(假设最近启动的这个程序位于窗口堆栈的顶部)


import gi
gi.require_version('Wnck', '3.0')
from gi.repository import Wnck , Gtk

screen=Wnck.Screen.get_default()
while Gtk.events_pending() :
    Gtk.main_iteration()

all_windows=screen.get_windows_stacked()

print(all_windows[0].get_xid())


附言。未测试

相关内容