



















鼠标控制是桌面自动化中最基础、使用频率最高的能力之一。RobotGo 提供了一整套丰富的鼠标 API,从简单的移动点击,到平滑轨迹移动、拖拽、滚轮滚动、相对移动、按键状态切换等,几乎覆盖了所有真实鼠标操作。本章将系统讲解这些函数及其参数细节。
在深入函数之前,先明确坐标系:
robotgo.Move(100, -200) 可以把鼠标移动到主屏上方的副屏区域。读取当前鼠标位置使用:
x, y := robotgo.Location()
fmt.Println("鼠标当前坐标:", x, y)
Move 让鼠标瞬间“跳”到目标坐标,没有中间轨迹:
robotgo.Move(500, 300)
MoveSmooth 会让鼠标沿着一条带有缓动效果的轨迹移动到目标点,更接近真人操作,常用于需要规避“瞬移检测”或追求视觉自然的场景:
// 基本用法
robotgo.MoveSmooth(300, 300)
// 带可选参数:low 与 high 控制速度/平滑程度
// 第三、四个参数分别是 low(最低速度系数)和 high(最高速度系数)
robotgo.MoveSmooth(100, 200, 1.0, 10.0)
MoveSmooth 的后两个可选浮点参数用于调节移动的速度曲线,数值越大移动越慢、越平滑。可根据需要微调以获得理想的轨迹效果。
MoveRelative 基于鼠标当前位置进行偏移移动,而不是绝对坐标:
robotgo.Move(100, 100)
robotgo.MoveRelative(0, -10) // 在当前基础上向上移动 10 像素
Click 是最常用的点击函数,其签名支持可变参数:
robotgo.Click() // 默认点击左键
robotgo.Click("right") // 点击右键
robotgo.Click("center") // 点击中键
robotgo.Click("wheelLeft") // 滚轮向左
robotgo.Click("wheelRight") // 滚轮向右
robotgo.Click("left", true) // 双击左键(第二个参数 true 表示双击)
第一个参数指定按键("left"、"right"、"center" 等),第二个布尔参数指定是否双击(true 为双击)。
一种常见模式是“先移动再点击”:
robotgo.Move(400, 250)
robotgo.Click()
也可以利用 MouseSleep 在移动和点击之间自动留出延迟,避免目标程序来不及响应:
robotgo.MouseSleep = 100
robotgo.Move(400, 250)
robotgo.Click()
有些场景需要“按下不放”或“松开”,例如手动实现拖拽、长按。Toggle 用于切换某个鼠标键的按下/松开状态:
robotgo.Toggle("left") // 按下左键
// ... 做一些操作,比如移动鼠标 ...
robotgo.Toggle("left", "up") // 松开左键
第一个参数是按键名,第二个参数指定动作:省略或 "down" 表示按下,"up" 表示松开。
DragSmooth 在按住左键的同时平滑移动到目标坐标,实现拖拽:
robotgo.Move(100, 100) // 先移动到起点
robotgo.DragSmooth(300, 300) // 按住左键拖拽到 (300, 300)
如果需要更精细的控制,也可以用 Toggle 组合实现:
robotgo.Move(100, 100)
robotgo.Toggle("left") // 按下
robotgo.MoveSmooth(300, 300) // 平滑移动
robotgo.Toggle("left", "up") // 松开
这种写法可以在按下与松开之间插入任意复杂的中间逻辑。
RobotGo 提供了多种滚轮滚动方式,适应不同需求。
ScrollDir 按指定方向滚动给定的“格数”:
robotgo.ScrollDir(10, "up") // 向上滚动 10
robotgo.ScrollDir(20, "right") // 向右滚动 20
robotgo.ScrollDir(10, "down") // 向下滚动 10
robotgo.ScrollDir(10, "left") // 向左滚动 10
Scroll 接收水平和垂直两个方向的滚动量:
robotgo.Scroll(0, -10) // 垂直方向滚动 -10
robotgo.Scroll(100, 0) // 水平方向滚动 100
ScrollSmooth 提供更平滑的滚动效果:
robotgo.ScrollSmooth(-10, 6)
robotgo.ScrollRelative(10, -100)
不同的滚动函数在不同平台、不同应用下表现可能略有差异,建议在实际目标程序上做一些测试,挑选最稳定的一种。
下面是一个综合演示鼠标各项能力的程序,改编自官方示例:
package 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.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 设大一些(如 300ms),方便你用肉眼观察脚本行为;稳定后再调小以提速。MoveSmooth / DragSmooth。GetDisplayBounds(第 7 章)获取各屏边界。Toggle 手动拖拽时,务必保证最终一定调用 Toggle("left", "up") 松开,否则会导致鼠标“卡在按下状态”。本章系统讲解了 RobotGo 的鼠标控制能力:坐标系与多屏概念、瞬间/平滑/相对移动、各种点击方式、按键状态切换、拖拽以及多种滚轮滚动方法。我们还通过完整示例把这些函数串联起来,并总结了实战技巧。下一章我们将转向键盘控制,讲解按键、组合键与文本输入的方方面面。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。