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

前端之家收集整理的这篇文章主要介绍了用 go 实现跨平台 Autoit/AutoHotkey 和按键精灵功能示例代码前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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

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

  1. package main
  2.  
  3. import (
  4. . "fmt"
  5. "github.com/go-vgo/robotgo"
  6. )
  7.  
  8. func main() {
  9. //键盘控制
  10. robotgo.TypeString("Hello World")//输入Hello World
  11. robotgo.KeyTap("enter")//按下enter键
  12. robotgo.KeyTap("a","control")
  13. robotgo.KeyTap("h","command") //隐藏窗口
  14.  
  15. robotgo.KeyTap("i","alt","command")
  16. //按下"i","command"组合键
  17. arr := []string{"alt","command"}
  18. robotgo.KeyTap("i",arr)
  19. //按下"i","command"组合键
  20.  
  21. robotgo.KeyTap("w","command") //关闭窗口
  22. robotgo.KeyTap("m","command") //最小化窗口
  23. robotgo.KeyTap("f1","control")
  24. robotgo.KeyTap("a","control")
  25. robotgo.KeyToggle("a","down")//切换a键
  26. robotgo.KeyToggle("a","down","alt")
  27. robotgo.KeyToggle("a","command")
  28. robotgo.KeyToggle("enter","down")
  29. robotgo.TypeString("en")
  30.  
  31. //鼠标控制
  32. robotgo.MoveMouse(100,200)//移动鼠标到100,200位置
  33. robotgo.MouseClick()//鼠标左键单击
  34. robotgo.MouseClick("right",false) //右键单击
  35. robotgo.MouseClick("left",true) //左键双击
  36. robotgo.ScrollMouse(10,"up")//向上滚动鼠标
  37. robotgo.MouseToggle("down","right")//鼠标右键切换
  38. robotgo.MoveMouseSmooth(100,200)//平滑移动鼠标到100,200
  39. robotgo.MoveMouseSmooth(100,200,1.0,100.0)//设置平滑移动速度
  40. x,y := robotgo.GetMousePos()//获取鼠标坐标位置
  41. Println("pos:",x,y)
  42. if x == 456 && y == 586 {
  43. Println("mouse...","586")
  44. }
  45.  
  46. robotgo.MouseToggle("up")
  47. robotgo.MoveMouse(x,y)
  48. robotgo.MoveMouse(100,200)
  49.  
  50. for i := 0; i < 1080; i += 1000 {
  51. Println(i)
  52. robotgo.MoveMouse(800,i)
  53. }
  54. //屏幕控制
  55. //robotgo.CaptureScreen()
  56. // bit_map := robotgo.CaptureScreen()
  57. // Println("CaptureScreen...",bit_map)
  58. //gbit_map := robotgo.Capture_Screen()
  59. gbit_map := robotgo.BCaptureScreen()//获取屏幕位图
  60. Println("Capture_Screen...",gbit_map.Width)
  61.  
  62. sx,sy := robotgo.GetScreenSize()//获取屏幕width和height
  63. Println("...",sx,sy)
  64.  
  65. color := robotgo.GetPixelColor(100,200)//获取坐标100,200的颜色
  66. Println("color----",color,"-----------------")
  67.  
  68. color2 := robotgo.GetPixelColor(10,20)//获取坐标10,20的颜色
  69. Println("color---",color2)
  70.  
  71. // Bitmap
  72. abit_map := robotgo.CaptureScreen()//获取全屏位图
  73. Println("a...",abit_map)
  74.  
  75. bit_map := robotgo.CaptureScreen(100,30,40)
  76. //获取100,40的位图
  77. Println("CaptureScreen...",bit_map)
  78. // Println("...",bit_map.Width,bit_map.BytesPerPixel)
  79.  
  80. fx,fy := robotgo.FindBitmap(bit_map)//查找位图
  81. Println("FindBitmap------",fx,fy)
  82.  
  83. bit_pos := robotgo.GetPortion(bit_map,10,11,10)//截取位图
  84. Println(bit_pos)
  85.  
  86. bit_str := robotgo.TostringBitmap(bit_map)//Tostring位图
  87. Println("bit_str...",bit_str)
  88.  
  89. // sbit_map := robotgo.BitmapFromstring(bit_str,2)
  90. // Println("...",sbit_map)
  91.  
  92. robotgo.SaveBitmap(bit_map,"test.png")//保存位图为图片
  93. robotgo.SaveBitmap(bit_map,"test31.tif",1)
  94. robotgo.Convert("test.png","test.tif")//转换位图图片格式
  95.  
  96. open_bit := robotgo.OpenBitmap("test.tif")//打开图片位图
  97. Println("open...",open_bit)
  98.  
  99. //全局监听事件
  100. Println("---请按v键---")
  101. eve := robotgo.AddEvent("v")
  102.  
  103. if eve == 0 {
  104. Println("---你按下v键---","v")
  105. }
  106.  
  107. Println("---请按k键---")
  108. keve := robotgo.AddEvent("k")
  109. if keve == 0 {
  110. Println("---你按下k键---","k")
  111. }
  112.  
  113. Println("---请按鼠标左键---")
  114. mleft := robotgo.AddEvent("mleft")
  115. if mleft == 0 {
  116. Println("---你按下左键---","mleft")
  117. }
  118.  
  119. // mright := robotgo.AddEvent("mright")
  120. // if mright == 0 {
  121. // Println("---你按下右键---","mright")
  122. // }
  123.  
  124. // robotgo.LStop()
  125.  
  126. //窗口
  127. abool := robotgo.ShowAlert("hello","robotgo")//弹出窗口
  128. if abool == 0 {
  129. Println("ok@@@","确认")
  130. }
  131. robotgo.ShowAlert("hello","robotgo","确认","取消")
  132. // robotgo.GetPID()
  133. mdata := robotgo.GetActive()//获取当前窗口
  134. hwnd := robotgo.GetHandle()//获取当前窗口hwnd
  135. Println("hwnd---",hwnd)
  136. title := robotgo.GetTitle()//获取当前窗口标题
  137. Println("title-----",title)
  138. robotgo.CloseWindow()//关闭当前窗口
  139. robotgo.SetActive(mdata)//SetActive窗口
  140. }

猜你在找的Go相关文章