本库为使用 Windows UI Automation 框架进行 UI 自动化提供了一个高性能且易用的 Go 语言接口。它允许开发者通过 Windows COM 接口与应用程序中的 UI 元素进行高效交互和操作。
IUIAutomationCacheRequest,实现属性和模式的批量获取,大幅减少跨进程通信 (IPC) 开销。Value(值)、Invoke(调用)、Toggle(切换)、ExpandCollapse(展开折叠)及 SelectionItem(选中项)。Release() 调用确保无内存泄漏和句柄耗尽。Element 结构体集成 FindByName 和 FindByAutomationId 等快捷方法,定位元素更简单。go get -u github.com/auuunya/go-element
为了确保在不同架构的 Windows 系统(如 XP/7/10/11 的 32 位或 64 位版本)上正常运行,请参考以下编译命令:
shell
GOOS=windows GOARCH=amd64 go build .shell
GOOS=windows GOARCH=386 go build .注意: 如果在运行 64 位编译的程序时提示
is not valid win32 application,请尝试使用386架构重新编译。
import uia "github.com/auuunya/go-element"
func main() {
uia.CoInitialize()
defer uia.CoUninitialize()
hwnd, _ := uia.GetWindowForString("Chrome_WidgetWin_1", "")
instance, _ := uia.CreateInstance(uia.CLSID_CUIAutomation, uia.IID_IUIAutomation, uia.CLSCTX_INPROC_SERVER)
ppv := uia.NewIUIAutomation(uia.NewIUnKnown(instance))
defer ppv.Release()
root, _ := uia.ElementFromHandle(ppv, hwnd)
defer root.Release()
// 使用 Cache Request 进行高性能遍历
elems := uia.TraverseUIElementTree(ppv, root)
uia.TreeString(elems, 0)
}
func main() {
uia.CoInitialize()
defer uia.CoUninitialize()
hwnd, _ := uia.GetWindowForString("Notepad", "")
instance, _ := uia.CreateInstance(uia.CLSID_CUIAutomation, uia.IID_IUIAutomation, uia.CLSCTX_ALL)
ppv := uia.NewIUIAutomation(uia.NewIUnKnown(instance))
defer ppv.Release()
root, _ := uia.ElementFromHandle(ppv, hwnd)
tree := uia.TraverseUIElementTree(ppv, root)
// 通过名称快速查找元素并使用 ValuePattern 设置内容
if editor := tree.FindByName("文本编辑器"); editor != nil {
if vp, err := editor.GetValuePattern(); err == nil {
defer vp.Release()
vp.SetValue("你好,来自 go-element 的自动输入!")
}
}
}
欢迎贡献!如果您发现 Bug 或想添加新功能,请随时提交 Issue 或 Pull Request。
本库采用 MIT 许可证。
$ claude mcp add go-element \
-- python -m otcore.mcp_server <graph>