分享
  1. 首页
  2. 文章

用go实现跨平台Autoit/AutoHotkey和按键精灵功能示例代码

vway · · 4062 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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

项目地址:https://github.com/go-vgo/rob...

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

package main
import (
 . "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窗口
}

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
4062 次点击
1 回复 | 直到 2021年04月26日 15:17:38
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏