Golang通过系统调用模拟鼠标双击事件

通过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次点击事件,发送一次无效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空间法则

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值