SOCD: Snappy Tappy
- Start
SnapHook.exefrom the published folder and accept the Windows elevation prompt. Elevation is required so the keyboard hook can also see input sent to elevated games. - Add a game profile. You can select an executable from disk or choose a currently running process.
- Open the profile, add one or more key pairs, and choose an input method.
- Turn the master switch to ENABLED. A profile is active only while its matching process owns the foreground window.
The application can be hidden to the notification area; use its tray menu to enable/disable the engine, return to the window, or exit cleanly.
Every profile has its own input method. Release is the default and should be tried first.
Release preserves the real keyboard stream. Physical key presses and releases are delivered to the game normally. When opposite directions overlap, Snaphook only injects a release for the older direction; after the newer direction is released, it injects a press to restore the older one.
- Best default for most games.
- Real keyboard input reaches the game unchanged; SnapHook only adds the release and restore events needed for SOCD.
Hybrid provides the same release-and-restore SOCD behaviour, but receives physical keyboard events through Windows Raw Input instead of installing a global low-level keyboard hook. This keeps SnapHook out of the hook chain used by AHK, macro pads, accessibility tools, virtual keyboards, and similar applications.
- Use it when macros become unreliable while a SnapHook pair is configured or while one of the pair keys is held.
- Real key presses still reach the game; SnapHook only sends the synthetic release and restoration of the opposite key.
- It is intended for profiles that need macro compatibility.
Blocking holds back the real key event and replaces it with a synthetic
(SendInput) event. The game sees only the stream generated by SnapHook.
- Use it only when a particular game does not react correctly in Release or Hybrid.
- It depends on the game accepting synthetic input, so it can be less compatible with anti-cheat-protected games.
dotnet publish SnapHook.csproj -c Release -r win-x64 --self-contained false -p:PublishSingleFile=false -p:DebugType=none -o publishThe native worker is compiled automatically when Native/SnapHookWorker.exe is
missing. To force a rebuild:
dotnet build -p:RebuildNativeWorker=trueRequires the .NET 10 SDK and MSVC (Visual Studio 2022 or 2026 with the C++
workload). Native/build-worker.cmd locates VsDevCmd.bat on its own.
User data lives in %APPDATA%\SnapHook\:
settings.json— profiles, key pairs, options
- Kernel-level anti-cheat (Vanguard, and EAC in kernel mode) filters injected events regardless of how they are produced, so no user-mode design can bypass that. The release-only model degrades gracefully there — movement keeps working, snap tap simply has no effect.
- Extended keys (arrows, numpad enter, right Ctrl/Alt, Insert/Home/PgUp)
need
KEYEVENTF_EXTENDEDKEY. The worker sets it from the real event flags. - Left and right modifiers are kept apart by learning the virtual key from
the genuine event rather than from
MapVirtualKey, which is layout dependent. - Competitive rulesets in some titles treat snap tap as prohibited automation. That is a rules question, not a technical one: use it where you are actually allowed to.
