
我剛剛了解到狗尾,並且它可以允許從命令列枚舉 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執行者,但我不知道它是否真的可以做到這一點。