如何使自动答题器将其点击的毫秒随机化?

时间:2018-12-13 01:53:39

标签: c++

如何使我的自动答题器将点击的毫秒随机化?我之所以问这个问题,是因为我找不到任何相关文章,而且很长一段时间以来我一直一直想让这个问题得到解答,但正如我所说,找不到任何相关文章。

请提供给我代码。

我的代码:

#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毫秒

1 个答案:

答案 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;
}