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 adds synthetic events when it needs to release or restore the opposite key.
- After restoring a key, Hybrid sends a final synthetic key release when you physically release it. This prevents stuck movement if another keyboard hook delays event delivery.
- 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.
Testing has shown that the application works in many games. Notable popular titles include:
- Valorant
- Overwatch
- Apex Legends
- PUBG
- Deadlock
- Rocket League
- GTA V Legacy/Enhanced
It also works in Counter-Strike 2 outside official matchmaking. However, official Valve servers may kick players after detecting automated input.
FACEIT does not currently block SnapHook from running, but it ignores all of the application's input methods.
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
- 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.
