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:
178
, 33
, 57104900
( Gitlab )
Updated : Sep 19 2025
Site map
Updated : Sep 19 2025.
Complete source code with comments is shipped with Windows installer or can be watched on Github and Gitlab.
All future versions of The Fastest Mouse Clicker for Windows will be cross-platform and made with Qt.
First, I have compiled a 64-bit minimalistic, static/static-runtime build of Qt v5.15.5 (LTS) made for Windows 7 to 11 under MSVC 2019 compiler.
Configure options:
C:\qt-src-5.15.5\configure -static -static-runtime -qt-zlib -qt-libjpeg -qt-libpng -qt-freetype -qt-pcre -qt-harfbuzz -no-sse4.1 -no-sse4.2 -no-avx2 -no-avx512 -no-pch -no-ssl -no-openssl -no-opengl -qpa windows -confirm-license -opensource -release -make libs -make tools -prefix c:/qt-5.15.5-static
Download qt-5.15.5-static.zip.
Migration to cross-platform Qt edition of The Fastest Mouse Clicker for Windows is in successive progress. New application will get version 3.0.0.0 and will be called “The Fastest Mouse Clicker for <OS> (cross-platform Qt edition)”, where <OS> is “Windows”, “Linux”, “MacOS (M1)”. QtDesigner *.ui makeup is ready today. I tease you to look how pleasant and beautiful The Fastest Mouse Clicker v3.0.0.0 will appear on your PC screen. Full native support of 4K and Retina displays is here. As always, the application is statically linked and does not require 3rd-party DLL or OS component. Meanwhile, among Windows lineage, all the systems from Windows 7 to Windows 11 are supported. Note though, 32-bit OS builds (typically for Windows) have gone to the history. New app will be 64-bit only for all the platforms. Standby!
A great progress is undergoing right now. All the things about how does a cross-platform app function have been investigated. Initial code refactoring has been performed. The library libuiohook is found to be pretty clearly designed.
The Fastest Mouse Clicker v3.0.0.0 (the Qt edition) will use cross-platform libuiohook library to handle system all-displays-wide mouse and keyboard events. Its graphical UI will be completely re-designed to perform fully automatic recording and playback all the mouse and keyboard events. You can even edit the sequence recorded in depth and modify its playback speed. Furthermore you can randomize every mouse click or keyboard press. Mouse wheel events will be also supported.
The idea for recording is:
void dispatch_proc(uiohook_event* const event)
{
switch (event->type)
{
...
case EVENT_MOUSE_PRESSED:
case EVENT_MOUSE_RELEASED:
case EVENT_MOUSE_CLICKED:
case EVENT_MOUSE_MOVED:
case EVENT_MOUSE_DRAGGED:
g_tfmc->postMyCustomEvent(event->data.mouse.x, event->data.mouse.y);
break;
...
}
}
class HelloThread : public QThread
{
private:
void run()
{
...
// Set the event callback for uiohook events.
hook_set_dispatch_proc(&dispatch_proc);
// Start the hook and block.
// NOTE If EVENT_HOOK_ENABLED was delivered, the status will always succeed.
int status = hook_run();
}
};
// Define your custom event identifier
const QEvent::Type MY_CUSTOM_EVENT = static_cast<QEvent::Type>(QEvent::User + 1);
// Define your custom event subclass
class MyCustomEvent : public QEvent
{
public:
MyCustomEvent(const int customData1, const int customData2);
int getCustomData1() const;
int getCustomData2() const;
...
};
class TheFastestMouseClicker : public QMainWindow
{
public:
TheFastestMouseClicker();
Ui_MainWindow ui;
void postMyCustomEvent(const int customData1, const int customData2)
{
// This method (postMyCustomEvent) can be called from any thread
QApplication::postEvent(this, new MyCustomEvent(customData1, customData2));
}
protected:
void customEvent(QEvent* event)
{
// When we get here, we've crossed the thread boundary and are now
// executing in the Qt object's thread
if (event->type() == MY_CUSTOM_EVENT)
{
handleMyCustomEvent(static_cast<MyCustomEvent*>(event));
}
// use more else ifs to handle other custom events
}
void handleMyCustomEvent(const MyCustomEvent* event)
{
// Now you can safely do something with your Qt objects.
// Access your custom data using event->getCustomData1() etc.
ui.leMousePosX->setText(QString("%1").arg(event->getCustomData1()));
ui.leMousePosY->setText(QString("%1").arg(event->getCustomData2()));
}
...
};
The idea for playback is:
class Application : public QApplication
{
public:
...
protected:
bool notify(QObject* dest, QEvent* ev)
{
if ((g_tfmc != nullptr) && (dest == g_tfmc->ui.pbStart) && (ev->type() == QEvent::MouseButtonRelease))
{
// Allocate memory for the virtual events only once.
uiohook_event* event = (uiohook_event*)malloc(sizeof(uiohook_event));
if (event == NULL) {
return QApplication::notify(dest, ev);
}
// Playback code is here.
for (int i = 0; i < 275; i++) {
event->type = EVENT_MOUSE_MOVED;
event->data.mouse.button = MOUSE_NOBUTTON;
event->data.mouse.x = i;
event->data.mouse.y = i;
hook_post_event(event);
}
return QApplication::notify(dest, ev);
}
return QApplication::notify(dest, ev);
}
...
};
Resulting MS Visual Studio 2019 screenshot joining Qt and libuiohook: