ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

RobotGo 日本語 README 完全解读:Go 原生跨平台桌面自动化、RPA 与 AI Computer Use 实战指南

RobotGo 日本語 README 完全解读:Go 原生跨平台桌面自动化、RPA 与 AI Computer Use 实战指南 RPAGUI 自动化【免费下载链接】robotgoRobotGo, Go Native cross-platform RPA, GUI automation, Auto test and Computer use vcaesar项目地址https://gitcode.com/gh_mirrors/ro/robotgo点击查看免费下载本文以仓库内lang/README.ja.mdRobotGo 项目日文版 README为主体骨架结合仓库源码、示例与文档进行纵深展开。RobotGo 是一个用 Go 语言编写、面向桌面自动化Desktop Automation、自动测试Auto Test与 AI 计算机操作Computer Use的跨平台库可控制鼠标与键盘、读取屏幕、操作进程与窗口句柄、处理图像与位图并监听全局事件。读完本文你将掌握 RobotGo 的依赖环境配置、安装与升级、Cgo-free 纯 Go 构建标签体系以及鼠标、键盘、屏幕、位图、OpenCV 图像识别、全局事件钩子、窗口与进程管理等七大模块的完整实战写法并理解各 API 背后的源码级实现原理。1. 项目概览RobotGo 能做什么RobotGo 是面向桌面场景的 Go 原生自动化工具包官方定位覆盖三类典型应用桌面自动化Desktop Automation模拟鼠标移动、点击、滚轮与键盘输入自动测试Auto Test配合屏幕捕获、位图查找、OpenCV 图像识别完成 GUI 测试断言AI Computer Use将“看屏幕 找图 操作鼠标键盘”串成闭环作为 Agent 操作计算机的执行层。官方说明README 及 robotgo.go 包注释指出RobotGo 支持Mac、Windows、Linux三大桌面系统并支持arm64 与 x86-amd64架构。底层默认通过 Cgo 调用各平台原生 APImacOS 的 Quartz/Cocoa、Windows 的 Win32、Linux 的 X11/XTest同时提供了可在CGO_ENABLED0下交叉编译的纯 Go 后端详见第 4 节。从仓库结构看顶层robotgo.go是默认 Cgo 后端的总入口robotgo_pub.go是不依赖任何构建标签的公共 API版本、睡眠、位图结构、公共变量而win、darwin、x11、wayland、libei五个子目录则分别承载各平台的纯 Go 实现。2. 环境依赖Requirements官方文档强调安装 RobotGo 之前必须确保Golang 与 GCC已正确安装。不同平台的具体前置条件如下。2.1 全部平台Golang GCC2.2 MacOSbrew install go同时需要 Xcode 命令行工具xcode-select --install权限配置在「系统设置 隐私与安全 辅助功能、屏幕与系统音频录制」中添加「屏幕录制」和「辅助功能」权限否则屏幕捕获与事件注入会被系统拦截。2.3 Windowswinget install Golang.goGCC 工具链可选择以下任一方案# 方案一llvm-mingw winget install MartinStorsjo.LLVM-MinGW.UCRT # 方案二Mingw-w64WinLibs 构建 winget install BrechtSanders.WinLibs.POSIX.UCRT也可以手动下载 Mingw-w64 或其他 GCC 发行版将C:\mingw64\bin之类的路径加入系统环境变量Path。需要注意使用非 Mingw-w64 的 GCC 时若用到 bitmap 位图库需要自行编译 libpng。2.4 LinuxX11 桌面默认的 Cgo/X11 后端需要如下系统库GCC X11 扩展 XTestXtst 库 Clipboard: xsel xclip Bitmap: libpng仅被 bitmap 使用 Event-Gohook: xcb, xkb, libxkbcommon仅被 hook 使用Ubuntu / Debian# sudo apt install golang sudo snap install go --classic # gcc sudo apt install gcc libc6-dev # x11 sudo apt install libx11-dev xorg-dev libxtst-dev # Clipboard sudo apt install xsel xclip # Bitmap sudo apt install libpng-dev # GoHook sudo apt install xcb libxcb-xkb-dev x11-xkb-utils libx11-xcb-dev libxkbcommon-x11-dev libxkbcommon-devFedora# x11 sudo dnf install libXtst-devel # Clipboard sudo dnf install xsel xclip # Bitmap sudo dnf install libpng-devel # GoHook sudo dnf install libxkbcommon-devel libxkbcommon-x11-devel xkbcomp-devel xorg-x11-xkb-utils-devel ( Fedora 34)源码佐证默认 Cgo 后端的链接参数在 robotgo.go 中通过#cgo指令声明Linux 使用-lX11 -lXtstWindows 使用-lgdi32 -luser32macOS 使用 Cocoa/CoreFoundation/IOKit/Carbon 等框架macOS 14.05 以上还会链接 ScreenCaptureKit。2.5 WaylandLinuxWayland 后端是**纯 GoCgo-free**实现不需要任何系统 C 库但需要一个支持以下 wlroots 协议的合成器compositorzwlr_virtual_pointer_v1 (鼠标控制) zwp_virtual_keyboard_v1 (键盘控制) zwlr_screencopy_v1 (屏幕捕获) zwlr_foreign_toplevel_management_v1 (窗口管理)支持这些协议的典型合成器包括Sway、Hyprland、Wayfire等。文档明确提示GNOME 与 KDE 原生不支持这些协议。仓库中对应的 wlroots 协议绑定位于 wayland/internal/protocols 目录含 foreign_toplevel、screencopy、virtual_keyboard、virtual_pointer 四个子包纯 Go 实现位于 wayland 包。2.6 libeiGNOME / KDElibei 后端同样是**纯 GoCgo-free**实现它通过 freedesktop 的xdg-desktop-portalRemoteDesktop 接口驱动输入因此与 wlroots Wayland 后端不同可以在 GNOME 和 KDE 上运行。需要安装xdg-desktop-portal (portal D-Bus 服务) xdg-desktop-portal-gnome / -kde (当前桌面对应的 portal 后端)注意libei 后端只处理鼠标和键盘输入屏幕捕获与窗口管理会返回ErrNotSupported。该哨兵错误在 wayland_n.go 等构建标签文件中与ErrNoConnection一起被别名导出便于跨包使用errors.Is判断。3. 安装与更新Installation / Update支持 Go ModulesGo 1.11的项目只需 import 即可import github.com/go-vgo/robotgo若需手动安装go get github.com/go-vgo/robotgo更新到最新版本go get -u github.com/go-vgo/robotgo官方文档同时提醒两个历史注意事项go1.10.x 存在 C 文件编译缓存问题golang #24355以及go mod vendor的相关问题golang #26366。若在安装时遇到png.h: No such file or directory报错说明系统中缺少 libpng 头文件可参照上文 Ubuntu/Fedora 章节安装对应依赖包。仓库的 go.mod 显示当前模块版本为v2.00.0.1658, MT. Baker!定义于 robotgo_pub.go可通过robotgo.GetVersion()获取依赖包括 purego、jezek/xgb、vcaesar/gops、vcaesar/keycode、vcaesar/screenshot、vcaesar/imgo 等关键库。4. Cgo-free 构建一套 API五种纯 Go 后端这是 README 中信息密度最高的章节也是 RobotGo 面向现代 Linux 桌面与交叉编译的关键能力。官方说明RobotGo 为Windows、macOS、X11、Wayland、libeiLinux提供纯 GoCgo-free后端目前处于实验阶段。这些后端暴露完全相同的robotgoAPI业务代码零改动只需切换构建标签即可在CGO_ENABLED0下交叉编译不再需要 GCC、MinGW、Xcode 或 X11 头文件。4.1 后端与构建标签对照表后端构建标签Go 包WindowsCgo-freewingithub.com/go-vgo/robotgo/winmacOS经 purego 调用 Quartzmacgithub.com/go-vgo/robotgo/darwinX11Linux纯 Go X 协议x11github.com/go-vgo/robotgo/x11WaylandLinuxwlrootswaylandgithub.com/go-vgo/robotgo/waylandlibeiLinuxGNOME/KDE portallibeigithub.com/go-vgo/robotgo/libei纯 Go 默认全平台purego选择上面的mac/win/wayland4.2 常用构建命令# 各平台纯 Go 默认后端一个标签覆盖所有目标 # macOS - mac、Windows - win、Linux - wayland可与 x11/libei 组合以覆盖默认 go build -tags purego ./... CGO_ENABLED0 GOOSlinux GOARCHamd64 go build -tags purego,x11 ./... # Windows无需 Cgo / MinGW CGO_ENABLED0 GOOSwindows GOARCHamd64 go build -tags win ./... # macOS运行时经 purego 加载 Quartz/CoreGraphics无需 Xcode CGO_ENABLED0 GOOSdarwin GOARCHarm64 go build -tags mac ./... # X11纯 Go X 协议XTEST——无需 X11 头文件 CGO_ENABLED0 GOOSlinux GOARCHamd64 go build -tags x11 ./... # Wayland基于 wlroots 的合成器Sway、Hyprland、Wayfire 等 CGO_ENABLED0 GOOSlinux GOARCHamd64 go build -tags wayland ./... # libei经 xdg-desktop-portal RemoteDesktop 支持 GNOME/KDE CGO_ENABLED0 GOOSlinux GOARCHamd64 go build -tags libei ./...4.3 构建标签的源码级语义从仓库源码可以确认各标签的实际行为win标签排除默认的 Cgo/Win32 后端调用转发至纯 Go 的win包mac标签排除默认的 Cgo/Quartz 后端调用转发至纯 Go 的darwin包窗口管理返回ErrNotSupportedx11标签排除 Cgo/X11 后端调用转发至纯 Go 的x11包wayland标签排除 Cgo/X11 后端调用转发至纯 Go 的wayland包libei标签同时排除 Cgo/X11 与 wlroots Wayland 后端调用转发至纯 Go 的libei包purego标签跨平台快捷键——在所有平台排除 Cgo 后端按目标 OS 选择纯 Go 默认后端macOS→mac、Windows→win、Linux→waylandLinux 上可再组合x11或libei如-tags purego,libei改选其他纯 Go 后端。构建标签的约束在源码中以//go:build行体现例如 wayland_n.go 的约束为linux (wayland || purego) !libei !x11其中每个KeyTap、Move、CaptureImg等函数都只是一行转发到wl包的薄封装默认 Cgo 实现 robotgo.go 则声明!wayland !win !libei !mac !x11 !purego。robotgo_pub.go版本、睡眠、Bitmap/Point/Size/Rect 类型、DisplayID/NotPid/Scale 公共变量不带任何构建标签因此所有后端共享同一份公共 API 面。5. 官方示例全解析Examples以下示例均来自仓库 examples 目录另有 examples/README.md 与总入口 examples/main.go 可参考与日文 README 中给出的代码一一对应并附源码级讲解。5.1 鼠标控制Mouse完整示例见 examples/mouse/main.gopackage main import ( fmt github.com/go-vgo/robotgo ) func main() { robotgo.MouseSleep 300 robotgo.Move(100, 100) fmt.Println(robotgo.Location()) robotgo.Move(100, -200) // 支持多显示器 robotgo.MoveSmooth(120, -150) fmt.Println(robotgo.Location()) robotgo.ScrollDir(10, up) robotgo.ScrollDir(20, right) robotgo.Scroll(0, -10) robotgo.Scroll(100, 0) robotgo.MilliSleep(100) robotgo.ScrollSmooth(-10, 6) // robotgo.ScrollRelative(10, -100) robotgo.Move(10, 20) robotgo.MoveRelative(0, -10) robotgo.DragSmooth(10, 10) robotgo.Click(wheelRight) robotgo.Click(left, true) robotgo.MoveSmooth(100, 200, 1.0, 10.0) robotgo.Toggle(left) robotgo.Toggle(left, up) }源码级要点MouseSleep每次鼠标动作后的默认毫秒级休眠时间默认值为0定义于 robotgo_pub.go示例中设为300让动作节奏更接近真人。Move(x, y)绝对移动。在 Windows 或开启Scale时会先按系统缩放因子换算坐标见 robotgo.go 的MoveScale因此注释明确“支持多屏幕”坐标为负值表示主屏左/上的扩展屏区域。MoveSmooth(x, y, low, high, mouseDelay)拟人化平滑移动。默认low1.0, high3.0底层调用C.smoothlyMoveMouse见 robotgo.go示例中MoveSmooth(100, 200, 1.0, 10.0)的第四个参数为鼠标延迟。Click/Toggle支持的按键名有left、center、right、wheelDown、wheelUp、wheelLeft、wheelRight见 robotgo.go 的CheckMouse映射表。Click(left, true)为双击Toggle(left)默认按下Toggle(left, up)抬起。DragSmooth(10, 10)等价于“按住左键 → 平滑移动到目标 → 松开左键”实现见 robotgo.go。MoveRelative(x, y)相对位移内部先取当前坐标再叠加偏移见 robotgo_pub.go。5.2 键盘输入Keyboard完整示例见 examples/key/main.gopackage main import ( fmt github.com/go-vgo/robotgo ) func main() { robotgo.Type(Hello World) robotgo.Type(だんしゃり, 0, 1) // robotgo.Type(テストする) robotgo.Type(Hi, Seattle space needle, Golden gate bridge, One world trade center.) robotgo.Type(Hi galaxy, hi stars, hi MT.Rainier, hi sea. こんにちは世界.) robotgo.Sleep(1) // ustr : uint32(robotgo.CharCodeAt(Test, 0)) // robotgo.UnicodeType(ustr) robotgo.KeySleep 100 robotgo.KeyTap(enter) // robotgo.Type(en) robotgo.KeyTap(i, alt, cmd) arr : []string{alt, cmd} robotgo.KeyTap(i, arr) robotgo.MilliSleep(100) robotgo.KeyToggle(a) robotgo.KeyToggle(a, up) robotgo.WriteAll(Test) text, err : robotgo.ReadAll() if err nil { fmt.Println(text) } }源码级要点Type(str, msDelay, perKeySleep)按字符串逐个输入字符支持日文假名等多字节文本Type(だんしゃり, 0, 1)中第二个参数为字符间隔毫秒第三个参数为每键额外休眠。TypeStr是其别名见 key.go。KeyTap(key, mods...)敲击按键。修饰键既可以是可变参数KeyTap(i, alt, cmd)也可以是[]string切片KeyTap(i, arr)。源码 key.go 的appendShift会自动处理首字母大写或特殊字符如!、、#时自动附加shift因此robotgo.Type(Hello World)中的大写字母无需手动指定修饰键。KeyToggle(key, down/up)长按/释放按键KeyToggle(a)默认按下KeyToggle(a, up)释放见 key.go。KeySleep按键后的默认毫秒休眠默认10见 robotgo_pub.go。支持的键名除a-z、0-9外还包括enter、tab、esc、方向键、f1-f24、修饰键cmd/alt/ctrl/shift及其左右变体、媒体键audio_mute、audio_vol_up、audio_next等、小键盘键num0-num9等。完整列表见 key.go 的keyNames映射表与 docs/keys.md 文档。剪贴板WriteAll(Test)写入系统剪贴板ReadAll()读取并返回(string, error)。跨平台实现位于 clipboard 包其中 Linux 依赖第 2 节安装的xsel/xclip。5.3 屏幕读取与截图Screen完整示例见 examples/screen/main.gopackage main import ( fmt strconv github.com/go-vgo/robotgo github.com/vcaesar/imgo ) func main() { x, y : robotgo.Location() fmt.Println(pos: , x, y) color : robotgo.GetPixelColor(100, 200) fmt.Println(color---- , color) sx, sy : robotgo.GetScreenSize() fmt.Println(get screen size: , sx, sy) bit : robotgo.CaptureScreen(10, 10, 30, 30) defer robotgo.FreeBitmap(bit) img : robotgo.ToImage(bit) imgo.Save(test.png, img) num : robotgo.DisplaysNum() for i : 0; i num; i { robotgo.DisplayID i img1, _ : robotgo.CaptureImg() path1 : save_ strconv.Itoa(i) robotgo.Save(img1, path1.png) robotgo.SaveJpeg(img1, path1.jpeg, 50) img2, _ : robotgo.CaptureImg(10, 10, 20, 20) robotgo.Save(img2, test_strconv.Itoa(i).png) x, y, w, h : robotgo.GetDisplayBounds(i) img3, err : robotgo.CaptureImg(x, y, w, h) fmt.Println(Capture error: , err) robotgo.Save(img3, path1_1.png) } }源码级要点CaptureScreen(x, y, w, h)返回 C 结构位图CBitmap文档强调必须用defer robotgo.FreeBitmap(bit)释放内存否则会造成泄漏释放实现见 robotgo.go。不传参数时默认捕获主屏完整区域见 robotgo.go。ToImage(bit)将 C 位图转换为标准image.Image底层走ToRGBA见 robotgo.go之后即可交给imgo、bitmap或标准库处理。GetPixelColor(x, y)返回形如ff0000的十六进制颜色字符串PadHex补足 6 位见 robotgo.go。多显示器遍历DisplaysNum()获取显示器数量循环中设置全局变量robotgo.DisplayID i切换目标屏幕默认-1表示主屏GetDisplayBounds(i)返回某显示器的(x, y, w, h)边界CaptureImg()返回(image.Image, error)并在内部自动释放位图见 robotgo.go。保存Save(img, path)按扩展名自动选择格式SaveJpeg(img, path, quality)指定 JPEG 质量示例中为50。图像编解码与读写由 img.go 基于github.com/vcaesar/imgo提供。5.4 位图查找Bitmappackage main import ( fmt github.com/go-vgo/robotgo github.com/vcaesar/bitmap ) func main() { bit : robotgo.CaptureScreen(10, 20, 30, 40) // 使用 defer robotgo.FreeBitmap(bit) 释放位图 defer robotgo.FreeBitmap(bit) fmt.Println(bitmap..., bit) img : robotgo.ToImage(bit) // robotgo.SavePng(img, test_1.png) robotgo.Save(img, test_1.png) bit2 : robotgo.ToCBitmap(robotgo.ImgToBitmap(img)) fx, fy : bitmap.Find(bit2) fmt.Println(FindBitmap------ , fx, fy) robotgo.Move(fx, fy) arr : bitmap.FindAll(bit2) fmt.Println(Find all bitmap: , arr) fx, fy bitmap.Find(bit) fmt.Println(FindBitmap------ , fx, fy) bitmap.Save(bit, test.png) }源码级要点bitmap是独立的第三方库github.com/vcaesar/bitmap在 go.mod 中作为间接依赖使用场景出现提供Find查找首个匹配坐标、FindAll返回全部匹配坐标与Save。robotgo.ImgToBitmap(img)将标准image.Image转成 Go 结构Bitmap再经ToCBitmap转为 C 位图供bitmap.Find使用位图类型间的互相转换完整矩阵见 docs/keys.md。典型用法是「截屏 → 找图 → 移动到目标坐标」这正是 RPA / Computer Use 中“视觉定位 鼠标操作”的核心闭环。bitmap查找在纯 C 侧完成性能敏感场景下应优先复用位图句柄而不是反复截图。5.5 OpenCV 图像识别gcvpackage main import ( fmt math/rand github.com/go-vgo/robotgo github.com/vcaesar/gcv github.com/vcaesar/bitmap ) func main() { opencv() } func opencv() { name : test.png name1 : test_001.png robotgo.SaveCapture(name1, 10, 10, 30, 30) robotgo.SaveCapture(name) fmt.Print(gcv find image: ) fmt.Println(gcv.FindImgFile(name1, name)) fmt.Println(gcv.FindAllImgFile(name1, name)) bit : bitmap.Open(name1) defer robotgo.FreeBitmap(bit) fmt.Print(find bitmap: ) fmt.Println(bitmap.Find(bit)) // bit0 : robotgo.CaptureScreen() // img : robotgo.ToImage(bit0) // bit1 : robotgo.CaptureScreen(10, 10, 30, 30) // img1 : robotgo.ToImage(bit1) // defer robotgo.FreeBitmapArr(bit0, bit1) img, _ : robotgo.CaptureImg() img1, _ : robotgo.CaptureImg(10, 10, 30, 30) fmt.Print(gcv find image: ) fmt.Println(gcv.FindImg(img1, img)) fmt.Println() res : gcv.FindAllImg(img1, img) fmt.Println(res[0].TopLeft.Y, res[0].Rects.TopLeft.X, res) x, y : res[0].TopLeft.X, res[0].TopLeft.Y robotgo.Move(x, y-rand.Intn(5)) robotgo.MilliSleep(100) robotgo.Click() res gcv.FindAll(img1, img) // 同时使用模板匹配与 sift fmt.Println(find all: , res) res1 : gcv.Find(img1, img) fmt.Println(find: , res1) img2, _, _ : robotgo.DecodeImg(test_001.png) x, y gcv.FindX(img2, img) fmt.Println(x, y) }源码级要点gcvgithub.com/vcaesar/gcv是基于 OpenCV 的图像查找库支持从文件FindImgFile/FindAllImgFile与内存图像FindImg/FindAllImg/Find两种入口FindAll同时使用模板匹配与 SIFT 特征。robotgo.SaveCapture(path, x, y, w, h)一步完成“截屏并保存”见 robotgo.goDecodeImg(path)读取图片为image.Image见 img.go。找到目标坐标后执行robotgo.Move(x, y-rand.Intn(5))、Click()实现“识别 → 定位 → 点击”的自动化循环这也是 AI Computer Use 中最常用的交互模式。5.6 全局事件监听Event / gohookpackage main import ( fmt // github.com/go-vgo/robotgo hook github.com/robotn/gohook ) func main() { add() low() event() } func add() { fmt.Println(--- Please press ctrl shift q to stop hook ---) hook.Register(hook.KeyDown, []string{q, ctrl, shift}, func(e hook.Event) { fmt.Println(ctrl-shift-q) hook.End() }) fmt.Println(--- Please press w---) hook.Register(hook.KeyDown, []string{w}, func(e hook.Event) { fmt.Println(w) }) s : hook.Start() -hook.Process(s) } func low() { evChan : hook.Start() defer hook.End() for ev : range evChan { fmt.Println(hook: , ev) } } func event() { ok : hook.AddEvents(q, ctrl, shift) if ok { fmt.Println(add events...) } keve : hook.AddEvent(k) if keve { fmt.Println(you press... , k) } mleft : hook.AddEvent(mleft) if mleft { fmt.Println(you press... , mouse left button) } }源码级要点全局事件钩子由独立的github.com/robotn/gohook库提供支持按键回调注册Register、底层事件流Start返回 channel与阻塞式单键监听AddEvent/AddEvents三种模式。add()展示回调模式注册ctrlshiftq组合键后调用hook.End()优雅退出low()展示 channel 模式for ev : range evChan可拿到每一次底层键盘/鼠标事件event()展示同步等待模式。Linux 上该库依赖第 2 节安装的xcb、xkb、libxkbcommon等系统库README 中标注为 “Event-Gohook” 专属依赖。5.7 窗口与进程Window完整示例见 examples/window/main.gopackage main import ( fmt github.com/go-vgo/robotgo ) func main() { fpid, err : robotgo.FindIds(Google) if err nil { fmt.Println(pids... , fpid) if len(fpid) 0 { robotgo.Type(Hi galaxy!, fpid[0]) robotgo.KeyTap(a, fpid[0], cmd) robotgo.KeyToggle(a, fpid[0]) robotgo.KeyToggle(a, fpid[0], up) robotgo.ActivePid(fpid[0]) robotgo.Kill(fpid[0]) } } robotgo.ActiveName(chrome) isExist, err : robotgo.PidExists(100) if err nil isExist { fmt.Println(pid exists is, isExist) robotgo.Kill(100) } abool : robotgo.Alert(test, robotgo) if abool { fmt.Println(ok , ok) } title : robotgo.GetTitle() fmt.Println(title , title) }源码级要点进程 APIFindIds(name)按名称不区分大小写的子串匹配返回进程 ID 列表PidExists(pid)判断进程是否存在Kill(pid)结束进程——这三者的跨平台实现位于 ps.go基于github.com/vcaesar/gops在纯 Go 后端中分别由 wayland/process.go、win/process.go、libei/process.go 等提供。此外还有Pids()、FindName(pid)、FindPath(pid)、Run(cmd)等便捷函数见 ps.go。向指定进程注入输入Type(str, pid)、KeyTap(key, pid, mods...)、KeyToggle(key, pid, ...)都支持将 PID 作为第二参数实现“后台/定向”输入。注意 Windows 上存在NotPid全局变量见 robotgo_pub.go置为true时相关 API 将把该参数解释为窗口句柄HWND而非 PID。窗口激活ActivePid(pid)激活进程窗口ActiveName(name)则先FindIds再激活第一个匹配进程见 robotgo.go 的实现GetTitle()获取当前前台窗口标题。macOS 与 X11 的窗口激活分别实现在 robotgo_mac_win.go 与 robotgo_x11.goWindows 侧基于tailscale/win的SetForegroundWindow等 API见 robotgo_win.go。Alert(title, msg, ...buttons)弹出系统级对话框可传“确定/取消”等按钮文本返回用户点击结果。6. 公共变量与调优参数速查以下全局变量定义于不带构建标签的 robotgo_pub.go对所有后端生效是调优 RobotGo 行为的关键入口变量默认值说明MouseSleep0鼠标动作后的毫秒休眠调大可让操作节奏更拟人KeySleep10按键动作后的毫秒休眠DisplayID-1目标显示器 ID-1为主屏配合DisplaysNum()/GetDisplayBounds()遍历多屏NotPidfalseWindows 下将 PID 参数解释为窗口句柄HWNDScalefalse是否启用屏幕缩放因子换算Windows 下部分 API 默认按 DPI 换算见 robotgo_win.go 的ScaleFf dpi / 96.0类型系统方面BitmapGo 结构、CBitmapC 结构引用、image.Image之间可自由转换完整矩阵见 docs/keys.md常用组合为CaptureScreen → CBitmap、ToImage → image.Image、ImgToBitmap/ToCBitmap → 位图查找。7. 许可证LicenseRobotGo 主要以Apache License 2.0条款分发部分代码受多种 BSD 类许可证覆盖。仓库根目录提供 LICENSE 文件base目录的 C 头文件与各子包文件头部也均带有 Apache 2.0 许可声明例如 mouse/mouse.go。在分发或修改代码前请阅读对应许可证文本。8. 结语一份 README 背后的完整工程lang/README.ja.md虽然只是项目多语言 README 之一但它完整承载了 RobotGo 的「安装前置 → 构建体系 → 七大模块示例」主线。本文在此基础上将每条命令、每个参数都下沉到了仓库源码robotgo.go、key.go、img.go、ps.go、robotgo_pub.go、各纯 Go 后端目录与示例目录examples做了逐项印证。对开发者而言这意味着在 X11 桌面可直接使用默认 Cgo 后端在 Sway/Hyprland 上可切-tags wayland在 GNOME/KDE 上可切-tags libei而跨平台产物统一使用同一套robotgoAPI——这正是 RobotGo 作为 Go 原生桌面自动化、RPA 与 AI Computer Use 基础设施的核心价值。赞分享RPAGUI 自动化【免费下载链接】robotgoRobotGo, Go Native cross-platform RPA, GUI automation, Auto test and Computer use vcaesar项目地址https://gitcode.com/gh_mirrors/ro/robotgo点击查看免费下载相关推荐RobotGo 完全指南基于 Go 的跨平台桌面自动化、GUI 自动化与 AI Computer UseRobotGo 完全指南基于 Go 的跨平台桌面自动化、GUI 自动化与 AI Computer Use RobotGoRobotGo, Go NativeRPAGUI 自动化RobotGo 跨平台桌面自动化完全指南环境依赖、无 Cgo 纯 Go 构建与实战示例RobotGo 跨平台桌面自动化完全指南环境依赖、无 Cgo 纯 Go 构建与实战示例 本文以仓库 lang/README.de.md https://linRPAGUI 自动化RobotGo 跨平台桌面自动化完全指南环境搭建、Cgo-free 纯 Go 构建与七大实战示例RobotGo 跨平台桌面自动化完全指南环境搭建、Cgo free 纯 Go 构建与七大实战示例 本指南以 RobotGo 项目的官方文档 lang/REARPAGUI 自动化创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进