방금 배웠어요개 꼬리, 명령줄에서 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 응용 프로그램의 "내부"를 조사할 수 없습니다).
그렇다면 실행 중인 GUI 애플리케이션의 위젯 이름을 쿼리/나열할 수 있지만 접근성 기술 계층을 사용하지 않는 대부분의 데스크탑 환경 프레임워크(Gnome, KDE...)에서 작동하는 도구가 있습니까?
답변1
20년 전, 그 대답은 다음과 같았습니다.편집하다. Classic X Window 프로그램 사용X 툴킷, 위젯 계층 구조를 정의하고 다음을 통해 구성하는 표준 방법을 제공합니다.자원. X 툴킷을 사용하는 많은 프로그램은 응용 프로그램이 다른 응용 프로그램의 위젯 트리 및 리소스 값을 쿼리할 수 있도록 하는 Editres 프로토콜을 구현합니다.
Gtk 및 Qt와 같은 최신 위젯 툴킷은 Editres 프로토콜은 물론 X 리소스도 지원하지 않습니다. 그래서 당신은 운이 없습니다. 누군가 프로포즈를 하더군요Gtk+의 편집 지원그러나 패치는 채택되지 않았으며 라이브러리에 필요한 확장이 있더라도 애플리케이션에는 추가 지원이 포함되어야 했습니다. Qt(즉, KDE 응용프로그램)의 경우,Qt 메일링 리스트의 오래된 게시물입니다.제안KD집행인, 하지만 실제로 그렇게 할 수 있는지는 모르겠습니다.