用go實現跨平臺Autoit/AutoHotkey和按鍵精靈功能示例程式碼

veni發表於2016-11-24

Robotgo v0.40.0 對滑鼠鍵盤操作進行了大幅度的完善,由於跨平臺切換測試麻煩、合併對比幾個平臺的程式碼浪費時間,再加上 C 程式碼生產效率與 Go 和 JavaScript 不在一個級別上, 沒有支援視窗和程式對應視窗的選擇以及視窗 Bounds,將會在下一個版本完善, 鍵盤操作可能在某些輸入法上有些問題,請切換到系統輸入法,目前優先完成視窗控制程式碼的問題,後面會解決該問題

專案地址:https://github.com/go-vgo/robotgo

下面整理本機測試部分的程式碼,將會在以後版本陸續完善,並附上註釋 (請看清程式碼再執行):

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實現跨平臺Autoit/AutoHotkey和按鍵精靈功能示例程式碼
  • 加微信實戰群請加微信(註明:實戰群):gocnio

相關文章