[英]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.