循环重复的 do 语句与鼠标左键变量单击并按住



嘿,目前正在测试一些游戏的自动点击器,我对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);

最新更新