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),仅供参考

相关新闻

EOSIO cleos convert 命令详解:交易与 Action 数据的打包(Pack)与解包(Unpack)

EOSIO cleos convert 命令详解:交易与 Action 数据的打包(Pack)与解包(Unpack)

区块链 【免费下载链接】eos An open source smart contract platform 项目地址: https://gitcode.com/gh_mirrors/eo/eos 点击查看 免费下载 导读 cleos convert 是 EOSIO 命令行工具 cleos 提供的交易与 Action 数据序列化转换子命令组,用于在"…

2026/9/24 4:24:09 阅读更多 →
EMC检测费用七层拆解:从标准、场地到隐性失败成本

EMC检测费用七层拆解:从标准、场地到隐性失败成本

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 4:24:09 阅读更多 →
开源AI自动化模板:笔记整理、周报生成、架构图绘制一条流水线搞定

开源AI自动化模板:笔记整理、周报生成、架构图绘制一条流水线搞定

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 4:24:08 阅读更多 →

最新新闻

Kubernetes 集群中 CoreDNS 的部署与配置:从 kube-dns 平滑迁移的完整指南

Kubernetes 集群中 CoreDNS 的部署与配置:从 kube-dns 平滑迁移的完整指南

教程云原生容器编排 【免费下载链接】kubernetes-handbook Kubernetes 架构与生态:从云原生到 AI 原生基础设施的构建指南 项目地址: https://gitcode.com/gh_mirrors/ku/kubernetes-handbook 点击查看 免费下载 CoreDNS 是 CNCF 托管的开源 DNS 服务器…

2026/9/24 5:05:37 阅读更多 →
Wandb Core 中的 gax-go v2:从 2.4 到 2.25 的能力演进与源码级解析

Wandb Core 中的 gax-go v2:从 2.4 到 2.25 的能力演进与源码级解析

机器学习深度学习数据可视化可观测性 【免费下载链接】wandb The AI developer platform. Use Weights & Biases to train and fine-tune models, and manage models from experimentation to production. 项目地址: https://gitcode.com/gh_mirrors/wa/wandb 点…

2026/9/24 5:05:37 阅读更多 →
【SSM课程设计/毕业设计】基于 SSM+Vue 的电脑配件商品检索系统的设计与实现 基于 SSM+Vue 的电脑配件购物车管理系统【附源码、数据库、万字文档】

【SSM课程设计/毕业设计】基于 SSM+Vue 的电脑配件商品检索系统的设计与实现 基于 SSM+Vue 的电脑配件购物车管理系统【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/24 5:05:37 阅读更多 →
CodeBurn GNOME Shell 扩展:在 Linux 桌面面板上实时追踪 AI 编程 Token 消耗与成本

CodeBurn GNOME Shell 扩展:在 Linux 桌面面板上实时追踪 AI 编程 Token 消耗与成本

【免费下载链接】codeburn Free, local tool to track AI coding token usage and cost across 37 tools and agents (Claude Code, Cursor, Codex, Gemini and more), by model, project, and task. npx codeburn 项目地址: https://gitcode.com/gh_mirrors/co/cod…

2026/9/24 5:05:37 阅读更多 →
飞腾D2000 GPIO驱动实战:从设备树到gpiod点灯教程

飞腾D2000 GPIO驱动实战:从设备树到gpiod点灯教程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 5:05:37 阅读更多 →
SPI四种模式详解:从CPOL/CPHA原理到实战调试避坑指南

SPI四种模式详解:从CPOL/CPHA原理到实战调试避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 5:04:36 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →