我刚刚了解到狗尾,并且它可以允许从命令行枚举 GUI 应用程序的菜单项/小部件;例如(通过测试/自动化/DogtailTutorial - Ubuntu Wiki):
%> python
>>> from dogtail import tree
>>> gcalctool = tree.root.application('gcalctool')
>>> gcacltool.dump()
# You'll see something like:
{"gcalctool" application}
Node roleName='frame' name='Calculator - Scientific' description=''
Node roleName='filler' name='' description=''
Node roleName='menu bar' name='' description=''
Node roleName='menu' name='Calculator' description='' text='Calculator'
click
Node roleName='tear off menu item' name='' description='' text=''
click
Node roleName='menu item' name='Quit' description='' text='Quit'
click
Node roleName='menu item' name='Empty' description='' text='Empty'
click
Node roleName='menu' name='Edit' description='' text='Edit'
click
然而,它使用(据我所知)Gnome 桌面的辅助/“辅助技术”。所以我想知道 - 是否有这样一个工具(至少可以枚举小部件名称)可以在较低级别上工作 - 例如在 XWindows 级别上?
我猜(但不知道)XWindows 本身不提供任何标准的小部件框架 - 因此,编写一个工具来查询 X-Windows 级别的 GUI 小部件名称将很困难;它是否正确? (我想象类似xdotool
或 的东西wmctrl
,但是这些都不能探测 GUI 应用程序的“内部”)。
如果是这样 - 是否有一个工具可以与大多数桌面环境框架(Gnome、KDE ...)一起使用,可以查询/列出正在运行的 GUI 应用程序的小部件名称,但不使用辅助功能技术层?
答案1
二十年前,答案是编辑。经典的 X Window 程序使用X工具包,它提供了一种定义小部件层次结构并通过以下方式配置它的标准方法资源。许多使用 X 工具包的程序都实现了 Editres 协议,该协议允许应用程序查询另一个应用程序的小部件树和资源值。
现代小部件工具包(例如 Gtk 和 Qt)不支持 X 资源,更不用说 Editres 协议了。所以你运气不好。确实有人提议Gtk+ 中的编辑支持但该补丁从未被采用,即使该库确实具有必要的扩展,应用程序也必须包含额外的支持。对于 Qt(即 KDE 应用程序),这篇来自 Qt 邮件列表的旧帖子建议KD执行者,但我不知道它是否真的可以做到这一点。