繁体   English   中英

程序不会重复运行函数(C++)

[英]Program doesn't run functions repeatedly (C++)

我正在制作一个自动点击器。 我在另一个 SO 帖子上发现的“ClickLoop”function 有效,但我正在尝试添加一个键来打开和关闭自动点击器。

到目前为止,这是我的代码:

#include <windows.h>
#include <iostream>
#include <chrono>
#include <thread>
#include <random>

bool on = false;

void tick () {
    if(GetKeyState('x') & 0x8000) {
        on = !on;
    }
    tick();
};

void WINAPI ClickLoop(int delay) {
    std::cout << "test" << std::endl;
    while ((GetAsyncKeyState(VK_LBUTTON) & 0x8000) == 0) {
        Sleep(1);
    }

    int nCurrKeyState = GetKeyState(VK_LBUTTON);
    int nPrevKeyState;

    do {
        if (on) {
            INPUT Input;
            ZeroMemory(&Input, sizeof(INPUT));
            Input.type = INPUT_MOUSE;

            Input.mi.dwFlags =  MOUSEEVENTF_LEFTUP;
            SendInput(1, &Input, sizeof(INPUT));

            Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
            SendInput(1, &Input, sizeof(INPUT));

            // Delay in MS
            Sleep(delay);

            nPrevKeyState = nCurrKeyState;
            nCurrKeyState = GetKeyState(VK_LBUTTON);

            if ((GetAsyncKeyState(VK_LBUTTON) & 0x8000) == 0)
                break;
        } else {
            break;
        }
    } while (nCurrKeyState != nPrevKeyState);

    ClickLoop(delay);
}

int main() {
    int delay;
    std::cout << "Delay in milliseconds: ";
    std::cin >> delay;
    tick();
    ClickLoop(delay);

    return 0;
}

然后我使用 G++ 编译代码:

g++ main.cpp -o main

运行“主”可执行文件后,我发现它启动了,询问我延迟,然后在几秒钟后停止。

为什么会这样?

void tick () {
    ...
    tick();
}

这是一个无限的递归循环。 一旦main()调用tick() ,程序就会卡在这个循环中,永远不会到达ClickLoop()

void WINAPI ClickLoop(int delay) {
    ...
    ClickLoop(delay);
}

这也是一个无限的递归循环。

你需要摆脱这些递归循环。

我看到的另一个问题是您在某些地方使用GetKeyState() ,但GetKeyState()取决于调用线程具有消息循环来处理WM_(L|M|R)BUTTON(DOWN|UP) window 消息以更新线程的内部键盘 state。 但是此代码中没有 window 或消息循环。

GetAsyncKeyState()不依赖于 window 或消息循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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