[英]SendInput Mouse input click only?
如何使用 SendInput() 进行鼠标输入? 我完全糊涂了,我不明白微软网站上说的是什么。 这是我当前的代码:
if (toggled && (GetKeyState(VK_LBUTTON) & 0x100))
{
SendInput(UINT, MOUSEINPUT, WM_LBUTTONUP, NULL);
Sleep((rand() % 1000 / cps));
}
您需要填写一个(数组) INPUT
结构,其中包含您想要的鼠标详细信息,然后将该数组传递给SendInput()
。 这在SendInput()
文档中有很清楚的解释:
参数
cInputs
类型:
UINT
pInputs
数组中的结构数。
pInputs
类型:
LPINPUT
一组
INPUT
结构。 每个结构代表一个要插入键盘或鼠标输入流的事件。
cbSize
类型:
int
INPUT
结构的大小(以字节为单位)。 如果cbSize
不是INPUT
结构的大小,则函数失败。
此外,您对GetKeyState()
调用是错误的,因为它永远不会返回第 9 位设置为 1 的SHORT
值。根据GetKeyState()
文档,只有低(1)位或高(16)位会永远设置为1:
返回值指定了指定虚拟键的状态,如下:
- 如果高位为1,则key为down; 否则,它是了。
- 如果低位为 1,则键被切换。 如果某个键(例如 CAPS LOCK 键)打开,则会切换该键。 如果低位为 0,则该键关闭且未切换。当该键被切换时,键盘上的切换键指示灯(如果有)将亮起,当该键未切换时熄灭。
因此,如果您的目标是检查当前是否按住鼠标左键,则需要使用& 0x8000
(或< 0
)而不是& 0x100
(更好的是,考虑使用GetAsyncKeyState()
代替)。 请参阅检查鼠标左键是否被按住? .
试试这个:
if (toggled && (GetKeyState(VK_LBUTTON) < 0 /*& 0x8000*/))
{
INPUT input = {};
input.type = INPUT_MOUSE;
input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
SendInput(1, &input, sizeof(INPUT));
Sleep((rand() % 1000 / cps));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.