C++ C++;自动舔片器不退出循环

C++ C++;自动舔片器不退出循环,c++,winapi,C++,Winapi,因此,我试图使一个自动点击运行运行你按住鼠标按钮我当前的循环看起来像然而,当我运行这个它只是点击了一次又一次,并没有停止当我释放鼠标按钮。提前谢谢。ps pressed默认为false while(GetAsyncKeyState(VK_LBUTTON)&&!pressed) { pressed = true; INPUT Input = { 0 }; // left down Inpu

因此,我试图使一个自动点击运行运行你按住鼠标按钮我当前的循环看起来像然而,当我运行这个它只是点击了一次又一次,并没有停止当我释放鼠标按钮。提前谢谢。ps pressed默认为false

        while(GetAsyncKeyState(VK_LBUTTON)&&!pressed)
    {
        pressed = true;
        INPUT    Input = { 0 };
        // left down 
       Input.type = INPUT_MOUSE;
        Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
        ::SendInput(1, &Input, sizeof(INPUT
        // left up
        ::ZeroMemory(&Input, sizeof(INPUT));
        Input.type = INPUT_MOUSE;
        Input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
        ::SendInput(1, &Input, sizeof(INPUT
        cout << "pressed"
        sleep_for(milliseconds(100));

        pressed = false;
    }
while(GetAsyncKeyState(VK_LBUTTON)&&&!按下)
{
按下=真;
输入={0};
//左下
Input.type=输入\鼠标;
Input.mi.dwFlags=MOUSEEVENTF_LEFTDOWN;
::SendInput(1,&Input,sizeof(Input
//左起
::零内存(&Input,sizeof(Input));
Input.type=输入\鼠标;
Input.mi.dwFlags=MOUSEEVENTF_LEFTUP;
::SendInput(1,&Input,sizeof(Input

cout首先,
GetAsyncKeyState
的返回值有两位,我们只需要它的最高位,所以我们使用
GetAsyncKeyState(VK_LBUTTON)&0x8000

其次,循环结束时发送的信号模拟鼠标释放的操作,因此
GetAsyncKeyState()的返回值
为0,您不能继续进入循环模拟鼠标的点击操作,因此我们应该先模拟鼠标释放操作,然后模拟鼠标点击操作,这样功能才能正常实现

最后,
SendInput()
一次支持多个操作,我们可以构建一个输入数组,然后一次发送所需的信号,这样您就可以更轻松地实现您的需求

以下是您可以参考的代码:

#include <windows.h>
#include <iostream>
using namespace std;
#define INPUT_COUNT 2
int main(int argc, char* argv[])
{
    int pressed = false;
    while (true)
    {
        while (GetAsyncKeyState(VK_LBUTTON) & 0x8000)
        {
            pressed = true;
            INPUT Input[INPUT_COUNT] = { 0,0 };
            Input[0].type = INPUT_MOUSE;
            Input[0].mi.dwFlags = MOUSEEVENTF_LEFTUP;
            Input[1].type = INPUT_MOUSE;
            Input[1].mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
            ::SendInput(INPUT_COUNT, Input, sizeof(INPUT));
            cout << "pressed" << endl;
            pressed = false;
            Sleep(100);
        }
    }
    return 0;
}
#包括
#包括
使用名称空间std;
#定义输入计数2
int main(int argc,char*argv[])
{
int=false;
while(true)
{
while(GetAsyncKeyState(VK_LBUTTON)&0x8000)
{
按下=真;
输入[输入计数]={0,0};
输入[0]。类型=输入\鼠标;
输入[0]。mi.dwFlags=MOUSEEVENTF_LEFTUP;
输入[1]。类型=输入\鼠标;
输入[1]。mi.dwFlags=MOUSEEVENTF_LEFTDOWN;
::SendInput(输入计数、输入、大小(输入));

难道你发送了一个左键点击的事实不会导致
GetAsyncKeyState
返回true循环中的内容会使它退出。你将
按下的
设置为true,然后设置为false,不确定你为什么要这样做?我试图让它停止第二次点击的注册,但我没有正确执行。是否仍要忽略e由循环引起的单击,类似于GetAsyncKeyState@AlanBirtles以外的另一个函数。的返回值已记录在案。