
Я только что узнал особачий хвост, и он может разрешить перечисление пунктов меню/виджетов приложения с графическим интерфейсом из командной строки; например (черезТестирование/Автоматизация/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 Desktop. Поэтому мне стало интересно - есть ли такой инструмент (который может хотя бы перечислять имена виджетов), который работает на более низком уровне - например, на уровне XWindows?
Я предполагаю (но не знаю), что XWindows сама по себе не предлагает какой-либо стандартной структуры виджетов, и поэтому было бы сложно написать инструмент для запроса имен виджетов GUI на уровне X-Windows; это правильно? (Я представляю себе что-то вроде xdotool
или wmctrl
, но ни один из них не может исследовать «внутрь» приложения GUI).
Если да, то существует ли инструмент, работающий с большинством сред рабочего стола (Gnome, KDE...), который мог бы запрашивать/выводить список имен виджетов запущенного приложения с графическим интерфейсом, но без использования уровня технологий специальных возможностей?
решение1
Двадцать лет назад ответ был бы таким:редакторы. Классические программы X Window использовалиX-инструментарий, который предоставляет стандартный способ определения иерархии виджетов и ее настройки черезРесурсы. Многие программы, использующие X toolkit, реализуют протокол Editres, который позволяет приложениям запрашивать дерево виджетов и значения ресурсов другого приложения.
Современные виджеты-тулки, такие как Gtk и Qt, не поддерживают ресурсы X, не говоря уже о протоколе Editres. Так что вам не повезло. Кто-то предложилПоддержка Editres в Gtk+но патч так и не был принят, и приложение должно было бы включать дополнительную поддержку, даже если бы библиотека имела необходимые расширения. Для Qt (т.е. приложений KDE),этот старый пост из списка рассылки QtпредполагаетИсполнитель КД, но я понятия не имею, может ли он на самом деле это сделать.