繁体   English   中英

SendInput 鼠标输入只能点击?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM