如何使我的自动答题器将点击的毫秒随机化?我之所以问这个问题,是因为我找不到任何相关文章,而且很长一段时间以来我一直一直想让这个问题得到解答,但正如我所说,找不到任何相关文章。
请提供给我代码。
我的代码:
#include "stdafx.h"
#include <windows.h>
#include <iostream>
using namespace std;
int main()
{
cout << "\"F\" = Toggle on\n";
cout << "\"R\" = Toggle off\n\n";
bool Click = false;
while (1)
{
if (GetAsyncKeyState('F')) // Toggle on
{
Click = true;
}
if (GetAsyncKeyState('R')) // Toggle off
{
Click = false;
}
if (Click == true) // Autoclicker
{
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
Sleep(50);
}
}
return 0;
}
我希望它单击50到60毫秒
答案 0 :(得分:0)
利用chrono库,我们可以设置一个计时器,以测量按键之间的延迟,并且可以使用randomize库对延迟进行随机化。
要进行切换,请在GetAsyncKeyState()调用中使用&1测试是否设置了最低有效位。
这是一个很好的解决方案:
#include <windows.h>
#include <iostream>
#include <chrono>
#include <thread>
#include <random>
int main()
{
INPUT input{ 0 };
input.type = INPUT_MOUSE;
bool bClick = false;
std::default_random_engine generator;
std::uniform_int_distribution<int> distribution(1, 300);
int random_value = distribution(generator);
using Clock = std::chrono::steady_clock;
std::chrono::time_point<std::chrono::steady_clock> start, now;
std::chrono::milliseconds duration;
start = Clock::now();
while (true)
{
//toggles it on and off with one key
if (GetAsyncKeyState('U') & 1)
bClick = !bClick;
if (bClick)
{
now = Clock::now();
duration = std::chrono::duration_cast<std::chrono::milliseconds>(now - start);
if (duration.count() >= random_value)
{
int random_value = distribution(generator);
std::cout << random_value << std::endl;
input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
SendInput(1, &input, sizeof(INPUT));
input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
SendInput(1, &input, sizeof(INPUT));
start = std::chrono::steady_clock::now();
}
}
}
return 0;
}