通过github.com/lxn/win库实现golang对windows平台下库函数的调用,具体代码如下:
package main
import (
"fmt"
"unsafe"
"github.com/lxn/win"
)
func main() {
x, y := 180, 190 // 你想要移动到的位置
win.SetCursorPos(int32(x), int32(y))
var inputs [1]win.MOUSE_INPUT
inputs[0] = win.MOUSE_INPUT{
Type: 0,
Mi: win.MOUSEINPUT{
Dx: int32(x),
Dy: int32(y),
MouseData: 0,
DwFlags: win.MOUSEEVENTF_ABSOLUTE | win.MOUSEEVENTF_LEFTDOWN | win.MOUSEEVENTF_LEFTUP,
},
}
//inputs[1] = win.MOUSE_INPUT{
// Type: 0,
// Mi: win.MOUSEINPUT{
// Dx: int32(x),
// Dy: int32(y),
// MouseData: 0,
// DwFlags: win.MOUSEEVENTF_ABSOLUTE | win.MOUSEEVENTF_LEFTDOWN | win.MOUSEEVENTF_LEFTUP,
// },
//}
//fmt.Println(int32(unsafe.Sizeof(inputs)))
//连续发送2次时间可行,数组里面写2个事件发送一次不行,不知道为什么
ret := win.SendInput(uint32(len(inputs)), unsafe.Pointer(&inputs), int32(unsafe.Sizeof(inputs)))
fmt.Println("ret = ", ret, " last error = ", win.GetLastError())
ret = win.SendInput(uint32(len(inputs)), unsafe.Pointer(&inputs), int32(unsafe.Sizeof(inputs)))
fmt.Println("ret = ", ret, " last error = ", win.GetLastError())
}
Win10下测试结果为连续这样发送2次有效,数组长度为2,里面包含2次点击事件,发送一次无效。