RobotGo快速入门:30分钟上手Go语言桌面自动化脚本开发
你是否还在为重复的桌面操作感到厌烦?是否想通过编程实现鼠标键盘的自动控制,却苦于找不到简单易用的工具?本文将带你在30分钟内快速掌握RobotGo这个强大的Go语言桌面自动化库,让你轻松实现各种桌面自动化任务。读完本文,你将能够:安装配置RobotGo开发环境,编写简单的鼠标、键盘控制脚本,实现屏幕捕捉和图像识别,以及控制窗口和进程。
什么是RobotGo
RobotGo是一个用Go语言编写的跨平台GUI自动化工具库,它允许开发者编写自动化脚本,模拟鼠标点击、键盘输入、窗口控制等操作。RobotGo支持Mac、Windows和Linux(X11)系统,并且支持arm64和x86-amd64架构。通过RobotGo,你可以轻松实现各种桌面自动化任务,如自动化测试、 repetitive任务自动化、屏幕监控等。
官方文档:README.md
安装与配置
系统要求
在安装RobotGo之前,请确保你的系统已经安装了以下软件:
- Golang
- GCC
不同操作系统的具体要求和安装方法如下:
MacOS
brew install go
xcode-select --install
需要注意的是,在MacOS上还需要进行隐私设置,详情请参考issues/227。
Windows
winget install Golang.go
winget install MartinStorsjo.LLVM-MinGW.UCRT
或者安装MinGW-w64,并将其bin目录添加到系统环境变量Path中。
Linux
以Ubuntu为例:
sudo snap install go --classic
sudo apt install gcc libc6-dev
sudo apt install libx11-dev xorg-dev libxtst-dev
sudo apt install xsel xclip
sudo apt install libpng++-dev
sudo apt install xcb libxcb-xkb-dev x11-xkb-utils libx11-xcb-dev libxkbcommon-x11-dev libxkbcommon-dev
安装RobotGo
使用Go module支持(Go 1.11+),只需导入:
import "github.com/go-vgo/robotgo"
否则,安装robotgo包:
go get github.com/go-vgo/robotgo
如果遇到"png.h: No such file or directory"错误,请参考issues/47。
安装教程:docs/install.md
基本功能示例
鼠标控制
RobotGo提供了丰富的鼠标控制功能,包括移动、点击、拖拽等操作。以下是一个简单的鼠标控制示例:
package main
import (
"fmt"
"github.com/go-vgo/robotgo"
)
func main() {
robotgo.MouseSleep = 300
// 移动鼠标到(100, 100)位置
robotgo.Move(100, 100)
fmt.Println(robotgo.Location())
// 平滑移动鼠标
robotgo.MoveSmooth(120, -150)
// 点击鼠标左键
robotgo.Click("left", true)
// 拖拽操作
robotgo.DragSmooth(10, 10)
}
鼠标控制源码:mouse/mouse.go
键盘控制
RobotGo可以模拟键盘输入,支持单个按键、组合按键和字符串输入。以下是一个键盘控制示例:
package main
import (
"fmt"
"github.com/go-vgo/robotgo"
)
func main() {
// 输入字符串
robotgo.TypeStr("Hello World")
// 按键操作
robotgo.KeyTap("enter")
// 组合按键
robotgo.KeyTap("i", "alt", "cmd")
// 读取剪贴板内容
text, err := robotgo.ReadAll()
if err == nil {
fmt.Println(text)
}
}
键盘控制源码:key/key.go 按键代码定义:docs/keys.md
屏幕捕捉
RobotGo可以捕捉屏幕图像,获取屏幕尺寸和像素颜色等信息。以下是一个屏幕捕捉示例:
package main
import (
"fmt"
"strconv"
"github.com/go-vgo/robotgo"
)
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("screen size: ", sx, sy)
// 捕捉屏幕图像
img, _ := robotgo.CaptureImg()
robotgo.Save(img, "screenshot.png")
}
屏幕捕捉源码:screen/screen.go
窗口控制
RobotGo可以获取窗口标题,激活窗口,关闭进程等。以下是一个窗口控制示例:
package main
import (
"fmt"
"github.com/go-vgo/robotgo"
)
func main() {
// 获取窗口标题
title := robotgo.GetTitle()
fmt.Println("window title: ", title)
// 激活窗口
robotgo.ActiveName("chrome")
// 查找进程
pids, err := robotgo.FindIds("Google")
if err == nil && len(pids) > 0 {
// 激活进程窗口
robotgo.ActivePid(pids[0])
}
}
窗口控制源码:window/window.go
实战案例:自动化表单填写
下面我们来实现一个自动化表单填写的示例。假设我们需要在一个网页表单中自动填写姓名、邮箱,并提交表单。
package main
import (
"github.com/go-vgo/robotgo"
"time"
)
func main() {
// 等待浏览器打开
time.Sleep(3 * time.Second)
// 移动鼠标到姓名输入框并点击
robotgo.MoveSmooth(500, 300)
robotgo.Click()
// 输入姓名
robotgo.TypeStr("John Doe")
// 移动到邮箱输入框并点击
robotgo.MoveSmooth(500, 350)
robotgo.Click()
// 输入邮箱
robotgo.TypeStr("john@example.com")
// 移动到提交按钮并点击
robotgo.MoveSmooth(500, 450)
robotgo.Click()
}
在这个示例中,我们使用了MoveSmooth函数来平滑移动鼠标,Click函数来模拟点击,TypeStr函数来输入文本。通过调整坐标值,你可以将其适配到不同的表单页面。
完整示例代码:examples/main.go
高级功能
图像识别
RobotGo结合bitmap库可以实现图像识别功能,用于查找屏幕上的特定图像。
package 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)
// 保存图像
img := robotgo.ToImage(bit)
robotgo.Save(img, "test.png")
// 查找图像
bit2 := robotgo.ToCBitmap(robotgo.ImgToBitmap(img))
fx, fy := bitmap.Find(bit2)
fmt.Println("FindBitmap: ", fx, fy)
}
图像识别源码:cv/gocv.go
事件监听
RobotGo可以监听键盘和鼠标事件,用于实现热键功能或交互控制。
package main
import (
"fmt"
hook "github.com/robotn/gohook"
)
func main() {
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 pressed, exiting...")
hook.End()
})
// 启动事件监听
s := hook.Start()
<-hook.Process(s)
}
事件监听示例:examples/main.go中的event()函数
跨平台编译
RobotGo支持跨平台编译,可以在一个平台上编译出其他平台的可执行文件。
Windows64编译Windows32
SET CGO_ENABLED=1
SET GOARCH=386
go build main.go
Linux编译Windows
GOOS=windows GOARCH=amd64 CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ go build -x ./
更多编译选项和平台支持,请参考docs/install.md中的CrossCompiling部分。
总结与展望
通过本文的介绍,你已经了解了RobotGo的基本功能和使用方法。从安装配置到基本操作,再到实战案例和高级功能,你已经具备了使用RobotGo进行桌面自动化开发的基础知识。
RobotGo目前正在不断发展中,未来计划包括:将部分C代码重构为Go代码,提供更好的多屏幕支持,支持Wayland,更新窗口句柄功能,以及尝试支持Android和IOS平台。
如果你在使用过程中遇到问题,可以查阅官方文档或提交issue,也可以参与到项目的开发中,为开源社区贡献力量。
贡献指南:CONTRIBUTING.md
希望本文能够帮助你快速上手RobotGo,实现各种有趣的桌面自动化项目。如果你觉得本文对你有帮助,请点赞、收藏并关注我,获取更多关于Go语言和自动化开发的教程。下期我们将介绍如何使用RobotGo实现更复杂的自动化任务,敬请期待!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



