本帖最后由 作者君 于 2025-4-23 13:27 编辑
从2.0.5开始,zTasker直接继承了AHK的UIAutomation模块,原地址:https://github.com/Descolada/UIA-v2
您可以在任务分类->程序->执行AutoHotkey脚本里,选择执行V2版AutoHotkey脚本时,
直接在代码里#Include UIA.ahk就可以使用UIAutomation操作桌面上UI元素,十分方便
zTasker一个用法示例的任务:https://bbs.everauto.net/forum.php?mod=viewthread&tid=382
一些基本用法如下:搬运自:https://www.autoahk.com/archives/40453,感谢原作者Tebayaki
基本的元素获取: - ele := UIA.ElementFromHandle(WinExist("A")) ; 获取窗口元素
- ele := UIA.ElementFromPoint(100 | 200 << 32) ; 获取屏幕坐标 100, 200 的元素
- ele := UIA.GetFocusedElement() ; 获取当前具有键盘焦点的元素
基本属性的获取: - ele := UIA.ElementFromHandle(WinExist("A"))
- MsgBox ele.Name
- MsgBox ele.ClassName
- pos := ele.BoundingRectangle
- MsgBox pos.left " " pos.top " " pos.right " " pos.bottom
获取指定QQ聊天的最新消息: - DetectHiddenWindows(true)
- qq := UIA.ElementFromHandle(WinExist("QQ ahk_class TXGuiFoundation"))
- condi := UIA.CreatePropertyCondition(30005, "AutoHotkey(ahk) | 中文社区") ;创建一个条件,指定30005: Name
- dialog := qq.FindFirst(condi)
- MsgBox dialog.Value
获取Edge浏览器的当前URL内容: - chrome := UIA.ElementFromHandle(WinExist("ahk_exe msedge.exe"))
- ; 有时候通过FindFirst寻找元素可能会比较慢,可以用TreeWalker指定搜索条件
- walker := UIA.CreateTreeWalker(UIA.CreatePropertyCondition(30006, "Ctrl+L")) ; 30006: AcceleratorKey
- search_bar := walker.GetFirstChildElement(chrome)
- MsgBox search_bar.Value
还可以简单地操作网页,打开bing并搜索指定内容: - Run "www.bing.com"
- hwnd := WinWaitActive("必应")
- page := UIA.ElementFromHandle(hwnd)
- condi1 := UIA.CreatePropertyCondition(30005, "Enter your search term")
- ; 组合两个条件
- condi2 := UIA.CreateAndCondition(UIA.CreatePropertyCondition(30005, "Search"), UIA.CreatePropertyCondition(30003, 50000))
- if search_box := page.Wait(condi1, 3000) {
- search_box.Value := "Autohotkey"
- if search_button := page.Wait(condi2, 3000)
- search_button.Invoke()
- }
另外还有类似于钩子的机制可以异步监控不同种类的事件,这里展示焦点变化事件的监控: - Persistent
- handler := UIA.AddFocusChangedEventHandler(HandleFocusChangedEvent)
- ; 解除监控
- ; UIA.RemoveFocusChangedEventHandler(handler)
- ; handler := ""
- HandleFocusChangedEvent(this, sender){
- ToolTip "焦点变化了"
- }
|