注册 登录

清河洛

Go中的键鼠操作库robotgo

qingheluo2022-09-18清河洛2113
robotgo是一个跨平台的控制键盘鼠标和读取屏幕的库安装:go get github.com/go-vgo/robotgo公用函数Sleep(sec):操作暂停指定的秒数 MilliSleep(ms):操作暂停指定的毫秒数键盘KeyTap(key, modifier):按下指定的按键keymodifier为功能键,按键的时候保持长按,支持alt,command(win),control和shift 可以使用多个功能键,用逗号隔开SetKeyDelay(ms):设置键盘延迟 (在键盘一个事件后), 单位 ms, 默认值 10msKeyToggle(key, down, modifier)...

robotgo是一个跨平台的控制键盘鼠标和读取屏幕的库

安装:go get github.com/go-vgo/robotgo

公用函数

Sleep(sec):操作暂停指定的秒数
MilliSleep(ms):操作暂停指定的毫秒数

键盘

KeyTap(key, modifier):按下指定的按键key
modifier为功能键,按键的时候保持长按,支持alt,command(win),control和shift
可以使用多个功能键,用逗号隔开

SetKeyDelay(ms):设置键盘延迟 (在键盘一个事件后), 单位 ms, 默认值 10ms
KeyToggle(key, down, modifier):按下或抬起按键key,down可选值有"down"和"up"
TypeStr(string):输入指定的字符串
TypeStrDelay(string, cpm):参数cpm限制每分钟输入的字符数量
WriteAll(text string):复制指定的字符串
ReadAll():粘贴,返回复制的字符串和错误信息
KeySleep属性:设定该属性后的每一步键盘操作完成后都会暂停指定的毫秒数

鼠标

MoveMouse(x,y)和Move(x,y):将指针移动到指定坐标
MoveMouseSmooth(x,y,speed):指针慢慢移动到指定坐标,speed表示速度的浮点数,越小移动越快,默认1.0
MouseClick(button, double):鼠标点击

button可选值left,right和center,默认left
double为一个bool值,表示是否双击,默认false

MoveClick(x, y, button, double):指针移动到指定坐标后点击
MouseToggle(down, button):鼠标长按和松开,down可选值down和up
DragMouse(x,y)和Drag(x,y):按住不松,然后拖动指针到指定坐标,如果之前使用了MouseToggle,则按住指定的按键,否则按住左键
GetMousePos():获取鼠标当前坐标
ScrollMouse(magnitude, direction):滚动鼠标滚轮,magnitude表示滚动的数量,direction可选值有down和up
MoveRelative(x,y):鼠标相对当前位置移动指定的大小
MouseSleep属性:设定该属性后的每一步鼠标操作完成后都会暂停指定的毫秒数

屏幕

GetPixelColor(x, y):获取屏幕指定坐标处的颜色,返回16进制颜色的6位字符串
GetScreenSize():获取屏幕的大小,返回两个数值
CaptureScreen(x,y,width,height):截取屏幕指定区域,返回一个位图bitmap对象

位图

OpenBitmap(openpath):打开图片返回位图对象
SaveBitmap(bitmap,savepath):将位图对象以指定格式保存在指定位置,返回保存状态
TostringBitmap(bitmap):将一个bitmap对象转换为字符串
GetPortion(bitmap,x, y, w, h):截取位图的指定区域,返回截取的位图对象
Convert(openpath, savepath):转换图片格式
FreeBitmap(bitmap):释放位图,释放之后不能再操作
CopyBitpb(bitmap):复制位图到粘贴板,返回bool值
DeepCopyBit(bitmap):复制并返回复制得到的位图对象

事件监听

在包"github.com/robotn/gohook"中实现全局事件监听,监听键盘或鼠标操作

引入后的模块名为hook

方式一:hook.Register(type, keys, callback)

type支持两个常量:hook.KeyDown和hook.MouseDown,分别监听键盘和鼠标的按下事件
keys为一个字符串数组,表示监听的按键组合
callback为触发监听后的回调函数,接受一个hook.Event类型参数

示例:

func main(){
    // 注册一个监听ctrl+shift+q组合按下的监听
    hook.Register(hook.KeyDown, []string{"q", "ctrl", "shift"}, func(e hook.Event) {
        fmt.Println("同时按下了ctrl+shift+q键")
    })

    // 注册一个监听ctrl+q组合按下的监听
    hook.Register(hook.KeyDown, []string{"q", "ctrl"}, func(e hook.Event) {
        fmt.Println("同时按下了ctrl+q键,程序退出")
        hook.End()
        // 退出整个事件监听
    })

    // 创建一个通道
    s := hook.Start()
    // 向通道中发送信号
    <-hook.Process(s)
}

以下函数会监听所有键盘和鼠标的事件
func main() {
    evChan := hook.Start()
    defer hook.End()
    for ev := range evChan {
        fmt.Println("hook: ", ev)
    }
}

方式二:使用封装好的AddEvents()或AddEvent()方法

方法会阻塞的等待指定的按键,直到按下指定的按键后返回一个bool类型的true

func main(){
    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")
    }
}

当运行后,在没有按下第一个指定的ctrl+shift+q时,由于程序处于阻塞状态,时无法对后面的指定按键进行监听的

窗口

ShowAlert(title, msg):显示弹窗,有确认和取消两个按钮,点击确认返回true,点击取消或关闭窗口返回false
CloseWindow():关闭打开的窗口
IsValid():当前窗口是否有效
SetActive(hwnd):设为当前窗口
GetActive():获取当前窗口
SetHandle(int):设置窗口句柄,返回设置是否成功,目前测试设置无效
GetHandle():获取窗口句柄,返回hwnd
GetTitle():获取窗口标题
GetPID():获取进程id
Pids():获取所有进程id
PidExists(pid):返回进程pid是否存在和错误信息
Process():获取所有进程结构,返回进程结构数组和错误信息
FindName(pid):通过进程id获取进程名称,返回名称字符串和错误信息
FindNames():获取所有进程名称,返回进程名称数组和错误信息,目前测试无效
FindIds(name):通过进程名称获取包含指定名称字符串的所有进程id,返回进程id数组和错误信息
ActivePID(pid):通过进程id激活窗口,目前测试无效


网址导航