Skip to content

Releases: poli0981/autoclick

AutoClick v1.3.3

Choose a tag to compare

@github-actions github-actions released this 12 May 03:55
v1.3.3
7a99bbf

Fixed

  • CI: workflow_run notifiers spammed "Skipped" jobs on every workflow completion: notify-ci-failure.yml and notify-release-pipeline.yml listened to workflows: ["*"] and let the reusable workflows decide via job-level if: — 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 to workflows: ["Release"] and gate entry into the reusable workflow with a top-level if: (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, and AutoClick.Win32 were still pinned to 1.3.1 while AutoClick.UI shipped as 1.3.2. All four .csproj files now share 1.3.3 / 1.3.3.0 so assembly metadata, file properties, and InformationalVersion agree 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 for bug_report.yml (version, install source, OS, repro, expected/actual, logs) and feature_request.yml (problem, solution, alternatives, scope), plus config.yml that 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) and docs/social.md (public profiles, communities, funding links), each with a Vietnamese mirror under docs/i18n/vi/. Existing docs/DEV_ENVIRONMENT.md also gets a Vietnamese mirror.

Changed

  • README.md: new Connect and Support section linking to docs/social.md, Donate, and Report Bug.

Notes

  • .github/FUNDING.yml already 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

Choose a tag to compare

@github-actions github-actions released this 08 May 06:39
2e9c301

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.exe process 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 in App.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 by Show() + Activate() + SetForegroundWindow on 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() calls Process.Start on the new exe and then Application.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 --restarting flag 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

Choose a tag to compare

@github-actions github-actions released this 26 Apr 15:10
3cb8ff4

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 with Owner = MainWindow, so its z-order was tied to the main window (minimizing AutoClick dragged the overlay down with it). Fixed by setting WS_EX_TRANSPARENT | WS_EX_TOOLWINDOW | WS_EX_NOACTIVATE extended styles via SetWindowLong in OnSourceInitialized, re-asserting HWND_TOPMOST via SetWindowPos on every refresh tick, and removing Owner so 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 into EVENT_SYSTEM_FOREGROUND via SetWinEventHook so 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.TotalClicks is a computed _clickCount + _skippedClicks; setting the backing fields to zero only fires PropertyChanged for the individual fields. The 500ms _uiTimer would normally fire PropertyChanged(TotalClicks) on the next tick — but the timer is stopped while idle, so the binding stayed stale until the next run. Fixed by firing PropertyChanged(TotalClicks) explicitly inside ResetStats.
  • 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.
  • WaitUntilMatch pixel 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 call WindowHelper.IsWindowStillValid each tick and stop the session promptly if the window dies.
  • Status bar showed AutoClick v1.2.0 after the v1.3.0 release: Updated to v1.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 ForegroundWatcher that hooks EVENT_SYSTEM_FOREGROUND and 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=1100 to prevent over-stretching on large displays. MinWidth=750, MinHeight=500 unchanged.
  • 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)

  • StandardFocusVisualStyle in App.xaml: a dashed rectangle outline using the new theme-aware FocusBrush. Wired onto PrimaryButton, DefaultButton, DangerButton, TabRadioButton named styles plus implicit Button/ComboBox/TextBox/CheckBox/ListBox styles 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 + TabIndex on 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.Name on Main view scheduler Start time / Stop time TextBoxes, GamePickerDialog SearchBox + WindowList, and ProfileNameDialog NameBox.
  • AutomationProperties.LiveSetting="Polite" on CoordinatePickerWindow.InstructionText so 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

Choose a tag to compare

@github-actions github-actions released this 25 Apr 12:24
390a35c

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-session snapshot 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.ClickPoints migrated from List to ObservableCollection so the UI updates live; ClickEngineService snapshots 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.Keystroke is now a fourth point type alongside Left / Double / Right click. In the coordinate picker, press 4 to enter Keystroke capture mode, then press any key — the next non-modifier key is captured as a VirtualKeyCode and added to the sequence. The click engine dispatches keystrokes via PostMessage(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.xaml joins 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.Name on the Theme picker ensures screen readers announce "Theme" when focusing the new ComboBox. Comprehensive AutomationProperties + 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 PickerInstruction updated to include the new 4=Keystroke mode in all five locales. AI-generated, mirroring the v1.1.0 disclosure pattern.

Changed

  • Settings schema migration: DarkMode: boolTheme: enum { Dark, Light, HighContrast }. SettingsService.Load reads legacy darkMode JSON values and seeds Theme = darkMode ? Dark : Light automatically — 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

Choose a tag to compare

@github-actions github-actions released this 25 Apr 11:22
v1.2.1
dd244c1

Added

  • GitHub Actions release workflow (.github/workflows/release.yml): builds, packs Velopack, and uploads artifacts to GitHub Releases automatically when a v* tag is pushed or the workflow is triggered manually. Produces releases.win.json, full and delta .nupkg, AutoClick-win-Portable.zip, and AutoClick-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

Choose a tag to compare

@poli0981 poli0981 released this 05 Apr 02:06
v1.2.0
02b4db2

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/3 in 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 .autoclick files 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

Choose a tag to compare

@poli0981 poli0981 released this 03 Apr 17:58
v1.1.0
9763560

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

  • InputSimulator now sends WM_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

Choose a tag to compare

@poli0981 poli0981 released this 03 Apr 14:37
v1.0.3
ae233e9

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 from settings.json or any runtime configuration.
  • The GitHubRepo property has been completely removed from AppSettings. Old settings.json files 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

Choose a tag to compare

@poli0981 poli0981 released this 03 Apr 13:52
v1.0.2
62a4d59

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 local settings.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

Choose a tag to compare

@poli0981 poli0981 released this 03 Apr 13:28
v1.0.1
a0217e9

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 / FreeRAM string 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