「Golang黑科技」RobotGo自动化神器,鼠标键盘控制、屏幕截图、全局监听全解析!

你是否还在为桌面自动化烦恼?RobotGo 是 Golang 编写的跨平台自动化库,支持 macOS、Windows 和 Linux,可以轻松实现鼠标控制、键盘输入、屏幕捕获、图像识别、窗口操作和全局事件监听。本文将从零开始带你掌握 RobotGo 的核心用法,并提供完整代码示例,让你快速上手,打造属于自己的桌面自动化工具!

Github:github.com/go-vgo/robo...

什么是 RobotGo?

RobotGo 是一个使用 Go 语言 开发的开源桌面自动化库,专为 MacOS、Windows 和 Linux(X11) 平台设计。它提供了丰富的 API 来帮助开发者实现:

  • 鼠标移动、点击、拖动、滚动
  • 键盘按键模拟与快捷键组合
  • 屏幕截图、图像识别与查找
  • 窗口操作(激活、查找、杀死进程)
  • 全局事件监听(键盘/鼠标钩子)

它非常适合用于开发自动化脚本、游戏外挂辅助、UI 测试工具等场景。

为什么选择 RobotGo?

  • 跨平台:支持三大主流操作系统。
  • 高性能:底层采用 C/C++ 绑定,执行效率高。
  • 简单易用:Go 语言接口简洁,文档齐全。
  • 功能丰富:覆盖桌面自动化的几乎所有需求。
  • 活跃维护:GitHub 上持续更新,社区活跃。

安装准备

在使用 RobotGo 前,请确保你的系统中已经安装以下依赖:

  • macOS:
bash 复制代码
xcode-select --install
  • Windows: 推荐使用 MinGW-w64 ,并将其 bin 路径添加到环境变量中。

  • Linux(Ubuntu/Debian):

bash 复制代码
sudo apt install gcc libpng-dev xorg-dev libxtst-dev libx11-dev xsel xclip

然后安装 Go 模块:

bash 复制代码
go get -u github.com/go-vgo/robotgo

快速入门:基础操作演示

我们先来看几个最常用的 RobotGo 功能:

1. 控制鼠标

go 复制代码
import (
	"github.com/go-vgo/robotgo"
)

func main() {
	robotgo.Move(100, 200) // 移动鼠标到坐标 (100, 200)
	robotgo.Click("left")  // 左键单击
}

2. 模拟键盘输入

go 复制代码
package main

import (
	"github.com/go-vgo/robotgo"
)

func main() {
	robotgo.KeyTap("enter")         // 按下回车键
	robotgo.TypeStr("Hello World!") // 输入文本
}

3. 截图与保存图片

go 复制代码
package main

import (
	"github.com/go-vgo/robotgo"
	"github.com/vcaesar/imgo"
)

func main() {
	bit := robotgo.CaptureScreen(10, 10, 300, 200) // 截取指定区域
	defer robotgo.FreeBitmap(bit)                  // 释放内存
	img := robotgo.ToImage(bit)
	imgo.Save("screenshot.png", img) // 保存为 PNG 文件
}

全局事件监听(键盘/鼠标钩子)

需要额外安装 gohook 模块:

bash 复制代码
go get -u github.com/robotn/gohook

代码示例:

go 复制代码
package main

import (
	"fmt"

	"github.com/go-vgo/robotgo"
	hook "github.com/robotn/gohook"
)

func main() {
	evChan := hook.Start()
	defer hook.End()

	for ev := range evChan {
		// hook:  2025-06-13 23:49:27.3701298 +0800 CST m=+2.724828801 - Event: {Kind: KeyDown, Rawcode: 87, Keychar: 65535}
		fmt.Println("hook: ", ev)
		if ev.Kind == hook.KeyDown || ev.Kind == hook.KeyUp {
			// ev.Keycode -> 转键盘映射
			// 为避免死循环,这里用w键进行示意
			robotgo.KeyTap("w")
		}
	}
}

更多功能一览

  • Scroll 鼠标滚轮控制
  • TypeStr 支持中文输入
  • CaptureImg 截图并返回整个屏幕的图像对象
  • KeyTap / KeyToggle 键盘模拟
  • Alert / ReadAll / WriteAll 弹窗、剪贴板读写
相关推荐
IT_陈寒12 分钟前
JavaScript实战技巧总结:深挖数组遍历的性能陷阱与实战解法
前端·人工智能·后端
我不会起名字32227 分钟前
Redis 从 0 到 1(十三):分布式锁被误删、锁不住?Go 无 Lua 实现 3 级防御
redis·go·分布式锁·watch·setnx
学长毕设10 小时前
基于springboot的食品仓库管理系统
java·spring boot·后端
滴滴答答哒10 小时前
ASP.NET Core + FaceRecognitionDotNet 人脸识别实战:DI 单例、特征向量持久化与 1:N 比对
后端·asp.net
captain37613 小时前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis
IT_陈寒14 小时前
Java序列化踩坑记:对象循环引用让我加班两小时
前端·人工智能·后端
泡海椒14 小时前
05-雷达图多维画像-信用评级多维画像
后端
王中阳Go14 小时前
5.27 分钟干完后端和全部测试:一场三小时笔试的五个失分点,四个不在代码上
大数据·数据库·人工智能·后端·大语言模型
大哥430914 小时前
Modbus 的"字序":一个配错就变成天文数字,或者干脆变成 0
后端
岩钧14 小时前
New API 源码解析:一个生产级 AI 网关的架构与实现
后端