RobotGo快速入门:30分钟上手Go语言桌面自动化脚本开发

RobotGo快速入门:30分钟上手Go语言桌面自动化脚本开发

【免费下载链接】robotgo go-vgo/robotgo: RobotGo 是一个用 Go 语言编写的跨平台 GUI 自动化工具库,它允许开发者编写自动化脚本,模拟鼠标点击、键盘输入、窗口控制等操作。 【免费下载链接】robotgo 项目地址: https://gitcode.com/gh_mirrors/ro/robotgo

你是否还在为重复的桌面操作感到厌烦?是否想通过编程实现鼠标键盘的自动控制,却苦于找不到简单易用的工具?本文将带你在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实现更复杂的自动化任务,敬请期待!

【免费下载链接】robotgo go-vgo/robotgo: RobotGo 是一个用 Go 语言编写的跨平台 GUI 自动化工具库,它允许开发者编写自动化脚本,模拟鼠标点击、键盘输入、窗口控制等操作。 【免费下载链接】robotgo 项目地址: https://gitcode.com/gh_mirrors/ro/robotgo

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值