首页 > 解决方案 > 如何让我的自动点击器随机化它点击的毫秒?

问题描述

如何让我的自动点击器随机化它点击的毫秒?我问这个问题是因为我找不到任何关于这个的文章,而且我很长一段时间都需要回答这个问题,但正如我所说的那样,找不到任何关于它的文章。

请给我代码。

我的代码:

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

标签: c++

解决方案


利用 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;
}

推荐阅读