The Fastest Mouse Clicker for Windows | Official Site

The fastest auto-clicker for Windows PC. 100000 clicks per second reached by arrayed Win32 SendInput(). GUI, command line, random clicks, and record/play sequences of clicks

Download the latest version : 2.6.2.0
( mirror ) - read ChangeLog

Github: 175 Stars given at Github , 33 Forks made at Github , 51465067 Total downloads including all the historical sites
( Gitlab )

Updated : Jun 11 2025

Developer's Facebook Follow Facebook
Developer's Youtube Follow Youtube
Developer's Tumblr Follow Tumblr

The Fastest Mouse Clicker for Windows | Technology

The fastest auto-clicker for Windows PC. This is the only auto-clicker utlizing arrays in SendInput system calls to reach ultimate clicking speed

Updated : Jun 11 2025.

Unlike other auto-clickers that use obsolete mouse_event() system call from C/C++ source or un-arrayed SendInput() from C#/.Net source, The Fastest Mouse Clicker for Windows uses arrayed SendInput() with specially prepared arrays of mouse events:


UINT nCntExtra = (nCnt - 1) * 2; // reserved index for DOWN, UP

for (UINT iExtra = 0; iExtra < nCntExtra; iExtra += 2)
{
    input[1 + iExtra].type = INPUT_MOUSE;

    input[1 + iExtra].mi.dx = dx;
    input[1 + iExtra].mi.dy = dy;

    input[1 + iExtra].mi.mouseData = dwData;
    input[1 + iExtra].mi.time = 0;
    input[1 + iExtra].mi.dwExtraInfo = dwExtraInfo;

    ...
}

...

UINT ret = SendInput(1 + nCntExtra, input, sizeof(INPUT));

The size of the arrays is carefully computed based on the click rate given by end-user. To avoid system event buffer overflow, the time in Sleep() is selected properly according the size of the array.

The GUI of the application seems archaic, but it is made by very base Win32 system calls to avoid performance degradation caused by high-level third-side libraries such as Qt or slow managed code in frameworks like C#/.Net. For example, GetAsyncKeyState() is used to detect the trigger keys pressed by end-user:


if (!doToggle)
{
    if (toggleState == 0 && GetAsyncKeyState(atoi(triggerText)))
        toggleState = 1;
    ...
}
else
{
    if (toggleState == 0 && GetAsyncKeyState(atoi(triggerText)))
        toggleState = 1;
    ...
}

Another benefit of such an approach is compact, statically-linked executable without any external dependencies.

When end-user selects low click rates, actual size of the array of mouse events in SendInput() is set to 1 and number of clicks per second is regulated by Sleep() only. But when end-user selects high click rates, the size of the array becomes significant. In rare circumstances, it may lead to freeze the whole Windows GUI. To avoid that, the helper thread is created to scan GetAsyncKeyState() independently in order end-user has requested to stop the clicking and force BlockInput() because mouse event buffer may be full:


DWORD WINAPI MyThreadFunction(LPVOID lpParam)
{
    while (true)
    {
        if (GetAsyncKeyState(atoi(triggerText2)))
        {
            ...
            BlockInput(TRUE);
            Sleep(100);
            BlockInput(FALSE);
            ...
            SetMsgStatus(hWnd, GetDlgCtrlID(statusText)
                , "idle");
        }

        Sleep(10);
    }

    return 0;
}

To be more compatible with older versions of Windows, The Fastest Mouse Clicker for Windows utilizes base Win32 API for widget creation. It uses traditional Windows approach to re-draw all the widgets in a Windows event loop. To update the view of a particular widget, an event is being sent to that widget in the main thread and incoming call is being passed to event loop handler where actual re-draw occurs.

First, we declare a WindowProc() callback function. Second, we register a main window class with that callback by RegisterClassA(). And finally we enter an infinite loop inside event callback function.


LRESULT CALLBACK winCallBack(
    HWND hWin
    , UINT msg
    , WPARAM wp
    , LPARAM lp
    );

...

// Initializing the window class
windClass.style         = CS_HREDRAW | CS_VREDRAW;
windClass.lpfnWndProc       = winCallBack;
windClass.cbClsExtra        = 0;
windClass.cbWndExtra        = 0;
windClass.hInstance     = instanceH;
windClass.hIcon         = LoadIcon(
                            windClass.hInstance
                            , MAKEINTRESOURCE(101)
                            );
windClass.hCursor           = LoadCursor(
                            NULL
                            , IDC_ARROW
                            );
windClass.hbrBackground = (HBRUSH)GetStockObject(
                            WHITE_BRUSH
                            );
windClass.lpszClassName = "The Fastest Mouse Clicker "
                            "for Windows";

//Registering the window class
RegisterClass(&windClass);

...

LRESULT CALLBACK winCallBack(
    HWND hWin
    , UINT msg
    , WPARAM wp
    , LPARAM lp
    )
{
    HDC dc;
    PAINTSTRUCT ps;
    int local_status = 0;
    switch (msg)
    {
    case WM_COMMAND:
        switch(LOWORD(wp))
        {
        case RESET_BTN:

        ...
    ...
}

From the other hand, to be more compatible with latest versions of Windows and newest hardware such as professional 4K displays and gaming monitors, font size adjusting is performed on application start utilizing both variable font size and embedded high DPI xml manifest.


struct _Sc
{
    int factor;
    _Sc() : factor(1)
    {
        int h, v;
        GetDesktopResolution(h, v);
        if (v > 1440)
            factor = 2;
    }
} _sc;

int Sc(int x)
{
    return x * _sc.factor;
}

...

statusText = CreateWindow(
    "Static"
    , "clicking status: idle"
    , WS_VISIBLE | WS_CHILD
    , Sc(5)
    , Sc(1)
    , Sc(410)
    , Sc(35)
    , hWnd
    , 0
    , 0
    , 0
    );

The application embedded xml manifest contains a section with high DPI awareness.


  ...

<asmv3:application>
  <asmv3:windowsSettings>
    <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
        true
    </dpiAware>
    <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">
        system
    </dpiAwareness>
  </asmv3:windowsSettings>
</asmv3:application>

  ...

There are much more programmatic tricks I used to achieve outstanding performance, compatibility and look-n-feel. If you want to discover them, you have to study source code yourself.