反應式 UIA 事件等待——焦點變化
無障礙錄製器每約 250 毫秒*輪詢*一次焦點元素,因此可能錯過快速的焦點轉換,且慢上四分之一秒才反應。
UIA 提供真正的事件:wait_for_focus_change 阻塞於原生的 AddFocusChangedEventHandler,並在
焦點移動的當下回傳——這是零延遲、不漏失的「等到焦點落在對話框上」原語,是 wait_for_window /
wait_for_image 在無障礙樹上的對應。
它是對可注入的 accessibility.backends.get_backend() 接縫的薄分派——可在任何平台透過注入 fake
backend 進行無頭測試;真正的事件訂閱(在呼叫執行緒上、以鎖註冊 / 取消註冊)位於 Windows 後端。
不匯入 PySide6。
無頭 API
from je_auto_control import wait_for_focus_change, click_text
click_text("Settings")
focused = wait_for_focus_change(timeout=3)
# {"name": "Search", "role": "ControlType_50004", "app_name": "app.exe", ...}
if focused is not None:
... # 焦點已移動——對話框 / 下一個欄位已就緒
回傳新獲得焦點的元素 {name, role, app_name, bounds, …},若在 timeout 秒內(預設 5)
沒有焦點變化則回傳 None。
執行器指令
AC_wait_for_focus_change``(``timeout)回傳 {changed, element}。以唯讀
ac_wait_for_focus_change MCP 工具及 Script Builder 指令(位於 Native UI 分類下)
形式提供。