嘿,目前正在测试一些游戏的自动点击器,我对C++很陌生
如何使用鼠标左键为鼠标单击函数运行 do 语句而不停止 do 语句
我尝试了不同的标志,包括:
input.mi.dwFlags = (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE | MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP);
与mouse_event(鼠标事件f)
do {
if (GetAsyncKeyState(VK_LBUTTON) & 0x80000000) {
enabled = true;
while (GetAsyncKeyState(VK_LBUTTON) & 0x80000000) {
Sleep(1000 / cps);
INPUT input;
input.type = INPUT_MOUSE;
input.mi.dx = 0;
input.mi.dy = 0;
input.mi.dwFlags = (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE | MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP);
input.mi.mouseData = 0;
input.mi.dwExtraInfo = NULL;
input.mi.time = 0;
SendInput(1, &input, sizeof(INPUT));
}
}
} while (true);
我试图做到这一点,当您按住左键单击时,它会运行包含自动单击功能的 while 语句,而不会因重复单击而停止 while 语句。
在代码中应该注意一些事情:
一、如何判断 GetAsyncKeyState() 的返回值
如果函数成功,则返回值指定键是否 自上次调用 GetAsyncKeyState 以来被按下,以及是否 键当前处于打开或关闭状态。如果设置了最高有效位,则 键已关闭,如果设置了最低有效位,则键为 在上一次调用 GetAsyncKeyState 后按下。但是,你 不应该依赖这最后一种行为;有关详细信息,请参阅 言论。
返回值的类型为 SHORT,即 2 个字节。所以试试GetAsyncKeyState(VK_LBUTTON) & 0x8000
。
其次,如何使用SendInput()
发送不同的鼠标状态。您应该创建一个新的INPUT
数据来保存不同的操作,但不要只是合并所有操作。
代码示例:
do {
if (GetAsyncKeyState(VK_LBUTTON) & 0x8000)
{
enabled = true;
while (GetAsyncKeyState(VK_LBUTTON) & 0x8000)
{
INPUT input[2];
input[0].type = input[1].type = INPUT_MOUSE;
input[0].mi.dx = 0;
input[0].mi.dy = 0;
input[0].mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN;
input[1].mi.dx = 0;
input[1].mi.dy = 0;
input[1].mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP;
SendInput(2, input, sizeof(INPUT) * 2);
}
}
} while (true);