grap = Grab Accessible Pattern
glob/regex/OR(;)/#UIA-scope/{JSON5}다중필드 AND
grap은 WKAppBot의 통합 UI 요소 주소 언어입니다. Win32 윈도우, UIA 노드, 웹 페이지, Android 앱의 모든 요소를 하나의 문법으로 표현합니다.
wkappbot a11y find "*메모장*" # 제목에 "메모장" 포함
wkappbot a11y find "계산기" # 정확히 "계산기"
wkappbot a11y find "*설정*창*" # 복수 와일드카드
wkappbot a11y find "*메모장*;*계산기*" # 메모장 또는 계산기
wkappbot a11y find "*Chrome*;*Edge*" # Chrome 또는 Edge
여러 앱 중 하나가 존재하는지 확인할 때 유용합니다.
wkappbot a11y find "regex:btn_\\d+" # btn_ 뒤에 숫자
wkappbot a11y find "regex:^계산기$" # 정확히 "계산기"만
#)#으로 UIA 트리를 드릴다운합니다:
wkappbot a11y find "계산기#숫자 패드" # 계산기 안의 "숫자 패드" 그룹
wkappbot a11y click "heroes#realtime-account" # heroes 창 안의 realtime-account 노드
wkappbot a11y read "*메모장*#*Edit*" # 메모장 안의 편집 영역
스코프는 여러 단계 중첩 가능합니다:
wkappbot a11y find "*앱*#*메뉴바*#*파일*"
브라우저의 특정 탭 안 요소를 지정합니다:
# Chrome > ChatGPT 탭 > model 드롭다운
wkappbot a11y find "Chrome#ChatGPT#model"
# Edge > 특정 도메인 탭 > CSS 셀렉터
wkappbot a11y click "{proc:'msedge', domain:'app.example.com'}#.submit-btn"
탭 포털은 탭 전환을 자동으로 처리합니다.
여러 조건을 AND로 조합합니다:
# 프로세스 + 도메인
{proc:'chrome', domain:'claude.ai'}
# 제목 포함 + 프로세스
{proc:'notepad', title:'제목 없음'}
# 특정 Chrome 탭의 textarea
{proc:'chrome', domain:'chatgpt.com', title:'ChatGPT'}#main textarea
지원 필드:
| 필드 | 의미 |
|---|---|
proc |
프로세스명 (확장자 없이) |
domain |
브라우저 탭 도메인 |
title |
창 제목 (부분 일치) |
class |
Win32 클래스명 |
pid |
프로세스 ID |
이미 알고 있는 Win32 핸들:
wkappbot a11y click "hwnd:0x010B084A"
wkappbot a11y read "hwnd:0x010B084A"
a11y find 결과의 # TARGET "hwnd:..." 줄을 복사해 바로 사용할 수 있습니다.
# 기기/에뮬레이터#요소
wkappbot a11y find "adb://Fold5/*balance*"
wkappbot a11y click "adb://emulator-5554/*btn_buy*"
wkappbot a11y read "adb://device/*account_info*#balance"
ADB가 PATH에 있어야 하고, USB 디버깅이 활성화되어 있어야 합니다.
--nth 옵션여러 매칭 결과 중 특정 번째 대상을 선택합니다:
wkappbot a11y click "*Chrome*" --nth 2 # 두 번째 Chrome 창
wkappbot a11y close "*Chrome*" --nth 2~ # 두 번째부터 전체 닫기
wkappbot a11y read "*Chrome*" --nth ~2 # 마지막에서 두 번째
wkappbot a11y type "*Edit*" --nth 1,3~ # 첫 번째 + 세 번째부터 전체
wkappbot a11y click "*버튼*" --all # 매칭되는 모든 버튼
# MFC owner-drawn 컨트롤 (UIA 없음 → OCR 폴백)
wkappbot a11y find "heroes#realtime-account"
wkappbot a11y type "heroes#code-edit" "005930" # 삼성전자
wkappbot a11y click "heroes#*매수*"
# Claude AI에 메시지 입력
wkappbot a11y type "{proc:'chrome', domain:'claude.ai'}#main [contenteditable]" "안녕하세요"
wkappbot a11y click "{proc:'chrome', domain:'claude.ai'}#*전송*"
# 메모장 3개 중 두 번째 것에만 입력
wkappbot a11y type "*메모장*#*Edit*" "내용" --nth 2
a11y inspect으로 UIA 트리를 먼저 확인하세요:
wkappbot a11y inspect "*앱*" --depth 4
a11y highlight으로 실제로 어떤 요소를 가리키는지 시각화:
wkappbot a11y highlight "*앱*#*버튼*"