博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用 go 实现跨平台 Autoit/AutoHotkey 和按键精灵功能示例代码
阅读量:6403 次
发布时间:2019-06-23

本文共 4076 字,大约阅读时间需要 13 分钟。

Robotgo v0.40.0 对鼠标键盘操作进行了大幅度的完善, 由于跨平台切换测试麻烦、合并对比几个平台的代码浪费时间, 再加上 C 代码生产效率与 Go 和 JavaScript 不在一个级别上, 没有支持窗口和进程对应窗口的选择以及窗口Bounds, 将会在下一个版本完善, 键盘操作可能在某些输入法上有些问题, 请切换到系统输入法, 目前优先完成窗口句柄的问题, 后面会解决该问题.

项目地址:

下面整理本机测试部分的代码, 将会在以后版本陆续完善,并附上注释 (请看清代码再运行):

package mainimport (    . "fmt"    "github.com/go-vgo/robotgo")func main() {    //键盘控制    robotgo.TypeString("Hello World")//输入Hello World    robotgo.KeyTap("enter")//按下enter键    robotgo.KeyTap("a", "control")    robotgo.KeyTap("h", "command") //隐藏窗口    robotgo.KeyTap("i", "alt", "command")    //按下"i", "alt", "command"组合键    arr := []string{"alt", "command"}    robotgo.KeyTap("i", arr)    //按下"i", "alt", "command"组合键    robotgo.KeyTap("w", "command") //关闭窗口    robotgo.KeyTap("m", "command") //最小化窗口    robotgo.KeyTap("f1", "control")    robotgo.KeyTap("a", "control")    robotgo.KeyToggle("a", "down")//切换a键    robotgo.KeyToggle("a", "down", "alt")    robotgo.KeyToggle("a", "down", "alt", "command")    robotgo.KeyToggle("enter", "down")    robotgo.TypeString("en")    //鼠标控制    robotgo.MoveMouse(100, 200)//移动鼠标到100, 200位置    robotgo.MouseClick()//鼠标左键单击    robotgo.MouseClick("right", false) //右键单击    robotgo.MouseClick("left", true)   //左键双击    robotgo.ScrollMouse(10, "up")//向上滚动鼠标    robotgo.MouseToggle("down", "right")//鼠标右键切换    robotgo.MoveMouseSmooth(100, 200)//平滑移动鼠标到100, 200    robotgo.MoveMouseSmooth(100, 200, 1.0, 100.0)//设置平滑移动速度    x, y := robotgo.GetMousePos()//获取鼠标坐标位置    Println("pos:", x, y)    if x == 456 && y == 586 {        Println("mouse...", "586")    }    robotgo.MouseToggle("up")    robotgo.MoveMouse(x, y)    robotgo.MoveMouse(100, 200)    for i := 0; i < 1080; i += 1000 {        Println(i)        robotgo.MoveMouse(800, i)    }    //屏幕控制    //robotgo.CaptureScreen()    // bit_map := robotgo.CaptureScreen()    // Println("CaptureScreen...", bit_map)    //gbit_map := robotgo.Capture_Screen()    gbit_map := robotgo.BCaptureScreen()//获取屏幕位图    Println("Capture_Screen...", gbit_map.Width)    sx, sy := robotgo.GetScreenSize()//获取屏幕width和height    Println("...", sx, sy)    color := robotgo.GetPixelColor(100, 200)//获取坐标100, 200的颜色    Println("color----", color, "-----------------")    color2 := robotgo.GetPixelColor(10, 20)//获取坐标10, 20的颜色    Println("color---", color2)    // Bitmap    abit_map := robotgo.CaptureScreen()//获取全屏位图    Println("a...", abit_map)    bit_map := robotgo.CaptureScreen(100, 200, 30, 40)    //获取100, 200, 30, 40的位图    Println("CaptureScreen...", bit_map)    // Println("...", bit_map.Width, bit_map.BytesPerPixel)    fx, fy := robotgo.FindBitmap(bit_map)//查找位图    Println("FindBitmap------", fx, fy)    bit_pos := robotgo.GetPortion(bit_map, 10, 10, 11, 10)//截取位图    Println(bit_pos)    bit_str := robotgo.TostringBitmap(bit_map)//Tostring位图    Println("bit_str...", bit_str)    // sbit_map := robotgo.BitmapFromstring(bit_str, 2)    // Println("...", sbit_map)    robotgo.SaveBitmap(bit_map, "test.png")//保存位图为图片    robotgo.SaveBitmap(bit_map, "test31.tif", 1)    robotgo.Convert("test.png", "test.tif")//转换位图图片格式    open_bit := robotgo.OpenBitmap("test.tif")//打开图片位图    Println("open...", open_bit)    //全局监听事件    Println("---请按v键---")    eve := robotgo.AddEvent("v")    if eve == 0 {        Println("---你按下v键---", "v")    }    Println("---请按k键---")    keve := robotgo.AddEvent("k")    if keve == 0 {        Println("---你按下k键---", "k")    }    Println("---请按鼠标左键---")    mleft := robotgo.AddEvent("mleft")    if mleft == 0 {        Println("---你按下左键---", "mleft")    }    // mright := robotgo.AddEvent("mright")    // if mright == 0 {    //  Println("---你按下右键---", "mright")    // }    // robotgo.LStop()    //窗口    abool := robotgo.ShowAlert("hello", "robotgo")//弹出窗口    if abool == 0 {        Println("ok@@@", "确认")    }    robotgo.ShowAlert("hello", "robotgo", "确认", "取消")    // robotgo.GetPID()    mdata := robotgo.GetActive()//获取当前窗口    hwnd := robotgo.GetHandle()//获取当前窗口hwnd    Println("hwnd---", hwnd)    title := robotgo.GetTitle()//获取当前窗口标题    Println("title-----", title)    robotgo.CloseWindow()//关闭当前窗口    robotgo.SetActive(mdata)//SetActive窗口}

转载地址:http://rqnea.baihongyu.com/

你可能感兴趣的文章
关于监控工具的主动发起性能测试
查看>>
AngularJs $resource 高大上的数据交互
查看>>
Cisco基础实验回顾4--IP classless
查看>>
上接扩展GridView控件(6) - 响应行的单击事件和双击事件
查看>>
负载均衡实施 应该因地制宜
查看>>
非常好的BASH脚本编写教程
查看>>
MFC类库之CArray作为函数参数和返回值
查看>>
VMware vSphere 5.1 群集深入解析(十八)-DPM推荐向导&汇总
查看>>
plesk panel 虚拟主机管理平台 0day
查看>>
Java正则表达式进阶(一):写出常用的正则模式
查看>>
Android:Typeface、fonts、字体
查看>>
PgSQL · 源码分析 · AutoVacuum机制之autovacuum launcher
查看>>
MySQL初步使用
查看>>
【计算机网络】 DNS学习笔记 (>﹏<)
查看>>
ORA-01111: name for data file 119 is unknown - rename to correct file
查看>>
源代码构建Apache反向代理(包括SSL配置)
查看>>
MySQL · 捉虫动态 · 字符集相关变量介绍及binlog中字符集相关缺陷分析
查看>>
.Net Discovery系列之十一-深入理解平台机制与性能影响 (中)
查看>>
在Visual Studio引用对话框中找不到Civil 3D 2011 64位的COM组件的解决办法
查看>>
JS组件系列——自己动手扩展BootstrapTable的 冻结列 功能:彻底解决高度问题
查看>>