Releases: poli0981/autoclick
Release list
AutoClick v1.3.3
Fixed
- CI: workflow_run notifiers spammed "Skipped" jobs on every workflow completion:
notify-ci-failure.ymlandnotify-release-pipeline.ymllistened toworkflows: ["*"]and let the reusable workflows decide via job-levelif:— meaning every push, schedule, and even the notifiers themselves spawned a notify job that then skipped, cluttering the Actions tab with "Skipped" entries. Both callers now narrow the trigger toworkflows: ["Release"]and gate entry into the reusable workflow with a top-levelif:(failure-only for CI failures, success-on-tag-push for the release pipeline), so notify jobs only spawn when there's actually something to notify about. - Version drift across project files:
AutoClick.Core,AutoClick.Services, andAutoClick.Win32were still pinned to1.3.1whileAutoClick.UIshipped as1.3.2. All four.csprojfiles now share1.3.3/1.3.3.0so assembly metadata, file properties, andInformationalVersionagree across the build.
Added
- About → Connect and Support card: new section between Developer Info and Acknowledgements with links to X, YouTube, Discord, Patreon, Ko-fi, Bluesky, Mastodon, Steam, and Email; plus prominent Donate (GitHub Sponsors) and Report a Bug buttons. All labels localized across EN / VI / JA / KO / ZH (JA/KO/ZH machine-translated — native review welcome).
.github/ISSUE_TEMPLATE/: structured GitHub issue forms forbug_report.yml(version, install source, OS, repro, expected/actual, logs) andfeature_request.yml(problem, solution, alternatives, scope), plusconfig.ymlthat disables blank issues and routes general questions to Discussions / Discord / SECURITY.md..github/dependabot.yml: weekly NuGet and GitHub Actions update PRs, grouped by family (dotnet-runtime, observability, charts, packaging, actions) to keep PR noise low. Currently zero open security alerts on the repository..github/workflows/create-release-discussion.yml: when a release is published, automatically mirrors the release notes into a GitHub Discussion under the Announcements category (falls back to Releases, no-ops if Discussions is disabled). Idempotent — re-publishing the same tag does not create a duplicate thread.- Docs:
docs/pc_spec.md(developer hardware snapshot) anddocs/social.md(public profiles, communities, funding links), each with a Vietnamese mirror underdocs/i18n/vi/. Existingdocs/DEV_ENVIRONMENT.mdalso gets a Vietnamese mirror.
Changed
- README.md: new Connect and Support section linking to
docs/social.md, Donate, and Report Bug.
Notes
.github/FUNDING.ymlalready matched the intended Donate configuration (GitHub Sponsors + Ko-fi + Buy Me a Coffee + Patreon + PayPal) — no edits required for this release.- The Discussion auto-creation workflow expects an Announcements discussion category to exist on the repo. If absent, the workflow logs a notice and exits 0 (release shipping is unaffected).
AutoClick v1.3.2
Fixed
- Multiple AutoClick processes spawned on each launch: Every time the app was opened (Start menu, desktop shortcut, or installer-launched), a brand-new
AutoClick.UI.exeprocess was created — adding another tray icon, another set of registered global hotkeys, and another click engine in parallel. After a few launches the user could end up with 4–5 phantom processes still running (and still firing hotkeys) without realizing it. Root cause: there was no single-instance gate inApp.OnStartup— the DI container, tray icon, and click engine were built unconditionally on every launch. Fixed by adding a session-scoped named Mutex (Local\AutoClick.SingleInstance.{user-hash}) acquired right after the Velopack hook check; if the Mutex is already held, the new process forwards a "show window" command to the running instance over a named pipe (AutoClick.IPC.{user-hash}) and exits cleanly. The running instance handles the IPC message byShow()+Activate()+SetForegroundWindowon the main window — so launching AutoClick a second time now restores the existing window (even from the tray) instead of stacking processes. - Language-change restart could lose the single-instance lock momentarily:
RestartApplication()callsProcess.Starton the new exe and thenApplication.Current.Shutdown()— without coordination, the new instance would fail the Mutex check (the old one hadn't released yet) and exit, breaking the restart flow. Fixed by having the old process release the Mutex synchronously before spawning the new one, and passing a--restartingflag so the new process waits up to 3 s on Mutex acquisition (covering the brief window between the old process exiting and the OS releasing kernel handles).
Notes
- Velopack lifecycle hooks (
--veloapp-install,--veloapp-uninstall,--veloapp-firstrun,--veloapp-obsolete,--veloapp-updated) bypass the single-instance gate so that auto-update and install/uninstall flows continue to work even while a normal AutoClick instance is running. - If the running instance is killed via Task Manager (no graceful exit), the OS automatically releases the abandoned Mutex on the next launch — no manual cleanup required.
AutoClick v1.3.1
Fixed
- Heatmap overlay was not click-through and was anchored to the main window: The overlay set only WPF-level
IsHitTestVisible="False", which suppresses hit-testing inside the WPF tree but does not stop the OS from routing mouse input to the overlay HWND — the underlying game window therefore never received clicks while the heatmap was visible. The overlay was also created withOwner = MainWindow, so its z-order was tied to the main window (minimizing AutoClick dragged the overlay down with it). Fixed by settingWS_EX_TRANSPARENT | WS_EX_TOOLWINDOW | WS_EX_NOACTIVATEextended styles viaSetWindowLonginOnSourceInitialized, re-assertingHWND_TOPMOSTviaSetWindowPoson every refresh tick, and removingOwnerso the overlay is a top-level window with independent z-order. - Heatmap overlay did not show on top of the foreground game in windowed mode: Even with TOPMOST set, the 200ms refresh tick was too coarse — when the user Alt-Tabbed back into a game with its own
WS_EX_TOPMOST, several frames could elapse before the overlay was re-promoted, leaving it stuck behind. Now hooked intoEVENT_SYSTEM_FOREGROUNDviaSetWinEventHookso the overlay re-asserts TOPMOST at the exact moment the foreground swap happens — no polling lag. Note: true exclusive-fullscreen games (legacy DirectX) bypass the desktop compositor entirely; no overlay technology can render above them. Borderless-fullscreen and windowed are now reliably supported. - Resetting per-game stats while the game was idle left the per-game card showing the pre-reset
TotalClicks:GameSessionViewModel.TotalClicksis a computed_clickCount + _skippedClicks; setting the backing fields to zero only firesPropertyChangedfor the individual fields. The 500ms_uiTimerwould normally firePropertyChanged(TotalClicks)on the next tick — but the timer is stopped while idle, so the binding stayed stale until the next run. Fixed by firingPropertyChanged(TotalClicks)explicitly insideResetStats. - Drag-drop a click-point chip onto itself fired a no-op
MoveClickPoint(i, i): Drop handler now early-returns when source and destination indices match. WaitUntilMatchpixel guard burned the full timeout when the game window closed mid-wait: The 50ms polling loop did not re-check the window handle. Fixed to callWindowHelper.IsWindowStillValideach tick and stop the session promptly if the window dies.- Status bar showed
AutoClick v1.2.0after the v1.3.0 release: Updated tov1.3.1.
Changed
- Heatmap overlays are now foreground-aware: when multiple games are queued and have heatmap toggled on, only the overlay for the game currently in the system foreground is visible — switching between games via Alt-Tab automatically swaps which heatmap is on screen, and switching to any non-game window (e.g. AutoClick itself, a browser) hides them all. Implemented via a process-wide
ForegroundWatcherthat hooksEVENT_SYSTEM_FOREGROUNDand is installed/torn down lazily based on subscriber count, so when no overlays are open there is zero syscall cost. - Heatmap tooltip and README now disclose the Windowed/Borderless/Fullscreen compatibility nuance: the heatmap button's tooltip points users at docs/HEATMAP_COMPATIBILITY.md (new) listing tested games per engine. Tooltip updated in all five locales (EN / VI / JA / KO / ZH).
- Default window size increased: 960×680 → 1100×760, with new bounds
MaxWidth=1600, MaxHeight=1100to prevent over-stretching on large displays.MinWidth=750, MinHeight=500unchanged. - All scrollbars hidden (
VerticalScrollBarVisibility="Hidden",HorizontalScrollBarVisibility="Hidden") across the Main game list, Settings/About/Dashboard tabs, About inner ScrollViewer, and the log panel ListBox. Mouse-wheel and keyboard scrolling continue to work — only the visible track is suppressed for a cleaner UI.
Added (Accessibility)
StandardFocusVisualStyleinApp.xaml: a dashed rectangle outline using the new theme-awareFocusBrush. Wired ontoPrimaryButton,DefaultButton,DangerButton,TabRadioButtonnamed styles plus implicitButton/ComboBox/TextBox/CheckBox/ListBoxstyles so every interactive control gets a consistent keyboard-focus indicator.- State-specific brushes in all three themes (
DarkTheme,LightTheme,HighContrastTheme):FocusBrush,DisabledBrush,DisabledTextBrush,ErrorBrush. HighContrast uses bright cyan focus + saturated red error for maximum tonal separation against the yellow primary. AutomationProperties.Name+TabIndexon the Settings view: every input (ComboBox + TextBox) in the Basic section now has an explicit accessible name + logical tab order matching its visual label, plus names on the Advanced color-guard inputs and the wait-timeout TextBox.AutomationProperties.Nameon Main view schedulerStart time/Stop timeTextBoxes, GamePickerDialog SearchBox + WindowList, and ProfileNameDialog NameBox.AutomationProperties.LiveSetting="Polite"onCoordinatePickerWindow.InstructionTextso screen readers announce when the picker switches between mode 1/2/3 (click types) and mode 4 (keystroke capture).Focusable="False"+AutomationProperties.IsOffscreenBehavior="Offscreen"on the heatmap overlay so the decorative click-through window is excluded from keyboard/screen-reader navigation.
AutoClick v1.3.0
Added
- Minimize on Start All: New Settings > Advanced toggle. When enabled, the main window auto-minimizes (to tray if Exit Behavior is set to Tray) on Start All — only when at least one game actually started. AFK convenience.
- Import/Export full session: New
*.autoclick-sessionsnapshot of the entire app state — settings, all saved profiles, and the current per-game queue (process name, window title, click points, intervals, sequence delay, pixel-guard config). On import, settings are restored and queued games are re-attached to currently running windows by exact ProcessName + WindowTitle match (mismatches log a warning and are skipped). Schema version 1; refuses to import while a session is running. - Drag-drop reorder points: Per-game card now shows each click point as a draggable chip (visible when 2+ points exist). Drag any chip onto another to swap positions. Drag is confined to a single game (cross-game drops are ignored) and disabled while the session is running.
GameSession.ClickPointsmigrated fromListtoObservableCollectionso the UI updates live;ClickEngineServicesnapshots the points list at the start of each cycle to keep mid-edit reorders safe. - Conditional click — wait until pixel matches: New third option for the existing pixel color guard ("On color mismatch"). Where Skip and Stop were the previous choices, Wait until pixel matches blocks the click loop on a point and polls every 50ms until the pixel matches the reference color or
ColorWaitTimeoutMs(default 5000ms, configurable in Settings) elapses — on timeout, the point is skipped. Use it for cooldown or button-lit triggers. Polling respects pause/cancel. - Keyboard input simulation:
ClickType.Keystrokeis now a fourth point type alongside Left / Double / Right click. In the coordinate picker, press4to enter Keystroke capture mode, then press any key — the next non-modifier key is captured as aVirtualKeyCodeand added to the sequence. The click engine dispatches keystrokes viaPostMessage(WM_KEYDOWN/WM_KEYUP)(skipping bounds + pixel-guard checks). Limitation: PostMessage keystrokes don't reach DirectInput / many anti-cheat games — works best for windowed games and standard Win32 controls. - Click heatmap overlay: New per-game Heatmap toggle button on the game card opens a transparent, click-through, always-on-top overlay aligned to the game window's client area. Each clicked coordinate is rendered as a colored circle on a blue → red gradient sized by relative click frequency. The overlay follows the target window's position/size at 200ms cadence and auto-closes when the game window goes away. Heatmap is cleared on Reset Stats / Reset All / Reset App.
- High-contrast theme: New
Themes/HighContrastTheme.xamljoins Dark and Light. The Settings > Theme control switches from a Dark/Light toggle to a 3-option ComboBox (Dark / Light / High Contrast). High-contrast uses pure black background, white text, white borders, and saturated yellow primary accents — every brush key the existing themes define is mirrored so no control loses its background/text/border. AutomationProperties.Nameon the Theme picker ensures screen readers announce "Theme" when focusing the new ComboBox. ComprehensiveAutomationProperties+ keyboard-nav annotations across all views are being rolled out incrementally; this release lands the high-contrast palette and the picker, with broader a11y annotations to follow in v1.3.1.- JA/KO/ZH translations for every new v1.3.0 string (Minimize on Start All, Export/Import Session, Drag to reorder, Wait until pixel matches, Wait timeout, Picker keystroke instructions, Click type Keystroke, Heatmap toggle/tooltip/title, Theme Dark/Light/High Contrast). Existing
PickerInstructionupdated to include the new4=Keystrokemode in all five locales. AI-generated, mirroring the v1.1.0 disclosure pattern.
Changed
- Settings schema migration:
DarkMode: bool→Theme: enum { Dark, Light, HighContrast }.SettingsService.Loadreads legacydarkModeJSON values and seedsTheme = darkMode ? Dark : Lightautomatically — no user action required when upgrading from v1.2.x. New settings are emitted as"theme": "Dark|Light|HighContrast"(string enum).
AutoClick v1.2.1
Added
- GitHub Actions release workflow (
.github/workflows/release.yml): builds, packs Velopack, and uploads artifacts to GitHub Releases automatically when av*tag is pushed or the workflow is triggered manually. Producesreleases.win.json, full and delta.nupkg,AutoClick-win-Portable.zip, andAutoClick-win-Setup.exe. docs/RELEASING.md: short release-process guide (bump version → CHANGELOG entry → tag push).
Notes
- Infrastructure-only release. App behavior is unchanged from 1.2.0. Updating from 1.2.0 → 1.2.1 also serves as the first end-to-end test of the automated Velopack flow.
v1.2.0
v1.2.0
Major feature update with click type per point, pixel color guard, game profiles, scheduler, real-time dashboard, and comprehensive quality-of-life improvements.
New Features
Click Type Per Point
- Each coordinate in a sequence can independently be Left Click, Double Click, or Right Click
- Press
1/2/3in the coordinate picker to switch type before clicking - Instruction banner updates dynamically to show the currently selected type
- Coordinate display shows
[D]or[R]suffix for non-default types
Game Profiles
- Save coordinates + click settings + delay as named presets
- Load presets into any game session
- Export/Import profiles as
.autoclickfiles for sharing - Delete profiles you no longer need
- Profiles persist across app sessions
Pixel Color Guard
- Before each click, optionally verify the pixel color at the coordinate matches a reference color (captured when the point was picked)
- On mismatch: Skip Point or Stop Session (configurable)
- Adjustable color tolerance (0-50) for minor color variations
- Color swatches displayed next to coordinates when guard is enabled
Scheduler
- Set start time and optional stop time (HH:mm format) for automated sessions
- Live countdown display in toolbar
- One-shot execution: starts at scheduled time, stops at scheduled time (or manually)
- Cancel anytime
Real-Time Dashboard
- Dedicated Dashboard tab with interactive charts:
- CPM Line Chart (live, 2-second intervals, 5-minute rolling window)
- Per-Game Breakdown (horizontal bar chart: success vs skipped per game)
- Success/Skip Ratio (pie chart)
- Per-Game CPM Timeline (individual line per game with color coding and legend)
- Summary cards: Total Clicks, Skipped, Uptime, Clicks/min, Peak CPM
- Export Stats to JSON (full session data including exited games)
- Reset All Stats button (disabled while tasks run)
- Charts freeze automatically when no tasks are running
Game Exit Notifications
- Balloon notification when a game process exits while tasks are running
- Shows success and skipped click counts for the exited game
- Auto-stop when all games have exited the queue
Settings Mode
- Global mode: Same click settings for all games (default)
- Custom mode: Per-game intervals, click mode, and profiles
Other Improvements
- Archived game stats: Exited game data preserved in dashboard until manual reset
- Per-game click stats: Each game card shows Success, Skipped, and Total counts
- Bounds validation: Auto-stop if window resizes and coordinates go out of bounds
- Sound notifications for all major actions (toggleable)
Fixes
- Pixel color guard settings not syncing to existing sessions after saving
- Color swatches incorrectly shown when guard is disabled
- Per-game chart only displaying one process name with 2+ games
- ESC key handling in coordinate picker
- Peak CPM absurd values on first tick (inherited from v1.1.0)
Important Notices
System Requirements: Running multiple games simultaneously increases CPU, RAM, and GPU usage significantly. Ensure your system meets the minimum requirements specified by each game's developer. See DISCLAIMER.
Anti-Cheat Warning: Games with kernel-level anti-cheat may detect this tool. Use at your own risk. The developer is not responsible for any account bans.
Self-Contained Build: This release includes the .NET 8 runtime. No separate runtime installation is required.
Upgrade
If you are on v1.0.x or v1.1.0, this version includes all previous fixes. Auto-update from v1.0.3+ should work seamlessly.
Full Changelog: v1.1.0...v1.2.0
v1.1.0
v1.1.0
Major feature update with multi-point sequences, 3 new languages, live statistics, and sound notifications.
New Features
Multi-Point Click Sequences
- Add multiple coordinates per game, creating click sequences executed in order each cycle
- Display:
#1(100,200) → #2(300,400) → #3(500,600) - Configurable delay between points (0–10,000ms) — set per game card
- Click count now tracks individual clicks, not cycles (3 points = 3 clicks per cycle)
- "Add Point" replaces old "Select Coordinate"; "Clear Points" to reset all
Game Dialog / Choice Compatibility
InputSimulatornow sendsWM_MOUSEMOVE+ 15ms delay before each click- Fixes games where choice buttons, dialog options, and menus ignored PostMessage clicks
- Sequence: MouseMove → 15ms → MouseDown → 15ms → MouseUp
3 New Languages (5 total)
- 🇯🇵 日本語 (Japanese)
- 🇰🇷 한국어 (Korean)
- 🇨🇳 中文 (Chinese Simplified)
- ~100 string keys per language. All AI-generated — community corrections welcome via PR
Session Statistics Panel
- Live stats bar below toolbar: Total Clicks, Uptime (hh:mm:ss), Clicks/min (average), Peak CPM
- Appears after first game starts, updates every 2 seconds
- Resets on "Reset App"
Sound Notifications
- System sounds for: Start, Stop, Pause/Resume, coordinate pick success, errors
- Uses Windows
SystemSounds— no external audio files - Toggle on/off in Settings > Advanced > "Sound Notifications"
Fixes
- Peak CPM no longer shows absurd values on first tick (was dividing by near-zero time)
Upgrade
If you are on v1.0.x, this version includes all previous fixes (hardcoded update URL, assembly metadata, etc.).
Full Changelog: v1.0.3...v1.1.0
Tested Games
| Game | Result |
|---|---|
| Bound Between Desks | Pass |
| Wuthering Waves | Pass (ACE Kernel — use at own risk) |
| Myosotis | Pass |
| Man in a Suit... | Pass |
| Mercury Elopement Syndrome | Fail (DirectInput) |
v1.0.3 - Fix
v1.0.3
Critical hotfix for the update system.
Do NOT use v1.0.0 ~ v1.0.2
Versions 1.0.0, 1.0.1, and 1.0.2 all contain a broken update URL (autoclick/autoclick instead of poli0981/autoclick). This defect cannot be fixed through auto-update or reinstall because the wrong value was either baked into the settings file or shipped in cached binaries due to build issues.
If you are on any version before 1.0.3, uninstall and download this release manually.
What's Fixed
- The GitHub repository URL is now a compile-time constant hardcoded in
UpdateService. It no longer reads fromsettings.jsonor any runtime configuration. - The
GitHubRepoproperty has been completely removed fromAppSettings. Oldsettings.jsonfiles that still contain this key will simply ignore it on deserialization. - The migration code added in v1.0.2 has been removed (no longer needed).
- Build output was fully cleaned and recompiled to ensure no stale cached binaries are shipped.
Verification
After launching v1.0.3, the log should show:
[INF] Update manager initialized for https://github.com/poli0981/autoclick (installed: True, current: 1.0.3)
If you still see autoclick/autoclick in the log, you are not running v1.0.3. Re-download from this release.
Full Changelog: v1.0.2...v1.0.3
v1.0.2 - Fix
v1.0.2
Hotfix for update manager pointing to wrong repository.
What's Fixed
- Update URL migration: Users who installed v1.0.0 or v1.0.1 had
"gitHubRepo": "autoclick/autoclick"saved in their localsettings.json. This caused the update checker to query a non-existent repository, resulting in 404 errors. v1.0.2 adds an automatic migration that detects and corrects this value on startup.
Upgrade Recommendation
All users on v1.0.0 or v1.0.1 should upgrade to v1.0.2. Auto-update will not function correctly on earlier versions. If auto-update fails, download this release manually from the link below.
How It Works
On first launch, SettingsService.Load() checks if GitHubRepo is set to the old "autoclick/autoclick" value. If so, it auto-corrects to "poli0981/autoclick" and saves the file. This runs once and is transparent to the user.
Full Changelog: v1.0.1...v1.0.2
v1.0.1 - Fix
v1.0.1
Cleanup and localization fixes.
What's Changed
Fixed
- Vietnamese translations now use proper Unicode diacritics across all resource files
- GitHub repository URL default corrected in AppSettings (
poli0981/autoclick) - Document links in About view corrected to
blob/master - Removed orphaned
FreeRamCommand(no UI binding existed) - Removed unused
MaxRAM/FreeRAMstring resources
Improved
- All remaining hardcoded English strings in XAML replaced with localized bindings:
- "Remove All", "Random", "Reset", "Random Min (s)", "Random Max (s)"
Added
- README with full project documentation
- CHANGELOG (v1.0.0 + v1.0.1)
- Code of Conduct with auto-ignore policy
- Developer Environment documentation (machine specs + tested games)
- GitHub Issue templates: Bug Report and Feature Request (YAML forms)
- Pull Request template with checklist and auto-ignore notice
- New localized string keys:
RemoveAll,RandomMin,RandomMax,ResetStats(EN + VI)
Tested Games
| Game | Result |
|---|---|
| Bound Between Desks | Pass |
| Wuthering Waves | Pass (ACE Kernel -- use at own risk) |
| Myosotis | Pass |
| Man in a Suit... | Pass |
| Mercury Elopement Syndrome | Fail (DirectInput) |
Full Changelog: v1.0.0...v1.0.1