嘿,目前正在测试一些游戏的自动点击器,我对C ++还是陌生的
如何在不停止do语句的情况下使用鼠标左键为鼠标单击功能运行do语句
我尝试了不同的标志,包括:
input.mi.dwFlags = (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE | MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP);
带有mouse_event(MOUSEEVENTF)
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语句。
答案 0 :(得分:0)
您应该在代码中注意一些事项:
首先,如何判断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);