Absolute touch-to-cursor remapper for Wacom Intuos Pro (and other Wacom touch tablets).
It all started with me buying an Intuos Pro M — PTH-660 — for $19. My son looked at it and said: "You know, dad, it would be much cooler if you can use it as a regular touch screen, not as mouse input. Then you can play osu! and other tap-based games on it easily without needing an extra driver."
And he was right. Normally the Intuos Pro touch surface acts like a trackpad — finger movement is relative, like dragging on a laptop. But the tablet knows exactly where your finger is in absolute coordinates. So if you tap the bottom-left corner of the tablet, the cursor should jump to the bottom-left corner of the screen — like a touchscreen.
No Wacom driver setting does this. So this app was written.
InTouch intercepts raw touch coordinates from the Wacom Multi-Touch API and drives the Windows cursor to the absolute screen position matching where you touched. Tap = click. Drag = drag. Two fingers show up in different colors in the diagnostic view. It sits quietly in your system tray until you need it.
- Absolute mapping — touch bottom-left of tablet → cursor goes to bottom-left of screen
- Tap-to-click — quick tap-and-lift injects a left mouse click via
SendInput - Drag support — hold and move past a threshold → left button held, cursor follows
- Multi-touch — tracks all fingers; first finger controls the cursor, additional fingers are visualized
- Multi-monitor — maps across the full virtual screen automatically
- System tray — green (active), orange (waiting for tablet), grey (disabled)
- Global hotkey —
Ctrl+Alt+Ttoggles the remapper on/off - Touch ripple — optional expanding ring animation at each touch point
- Fullscreen diagnostics — dark canvas showing real-time touch trails, per-finger colors, event log, and live settings adjustment
- Background operation — works regardless of which window has focus (HWND-based touch registration via a ghost overlay window)
- Windows 10/11
- .NET 8 SDK (to build)
- Wacom tablet driver installed (provides
WacomMT.dll)
cd src/InTouch
dotnet runOr publish a single-file executable:
dotnet publish -c Release -r win-x64 --self-contained -p:PublishSingleFile=trueThe resulting binary is in bin/Release/net8.0-windows/win-x64/publish/InTouch.exe.
- Run
InTouch.exe— a green T icon appears in the system tray - Touch the Intuos Pro surface — cursor jumps to the corresponding screen position
- Quick tap — sends a left click
- Slide finger across → drag (left button held while moving)
- Ctrl+Alt+T — toggle on/off
- Right-click tray icon → Settings... to open the fullscreen diagnostic canvas
- Right-click tray icon → Quit to exit
Opening Settings... from the tray launches a fullscreen dark canvas:
- Touch canvas — 1:1 screen mapping. Touch marks appear at the exact screen pixel your finger is on. Smooth connected trails per finger with fade-out. Each finger gets a distinct color (cyan, magenta, green, orange, purple).
- Event log — DOWN / UP / TAP events shown as muted text at the bottom, drawn underneath the touch trails.
- Floating buttons — Settings, Log Folder, and Close in the top-left corner.
- Settings overlay — centered panel with sliders for tap duration (50–800ms), drag threshold (0.1–5.0%), and a ripple toggle. Changes apply instantly.
- Keyboard — Escape closes the screen (or dismisses the settings overlay first).
The app uses the WacomMTDN wrapper (vendored from external/wacom-device-kit-windows)
to call WacomMT.dll. A 1×1 invisible ghost overlay window receives WM_FINGERDATA
(0x6205) messages via HWND-based registration, which works regardless of foreground focus.
Touch coordinates from opaque tablets (Intuos Pro) arrive as normalized 0.0–1.0 values.
These are mapped to virtual screen pixels using GetSystemMetrics (called per-frame — the
Win32 call is ~50ns so no caching is needed, and it automatically handles resolution/DPI/monitor
changes). Cursor movement and clicks are injected via SendInput with MOUSEEVENTF_ABSOLUTE.
A three-state machine classifies each touch:
- Idle → Pending on finger down (cursor moves, waiting to see if it's a tap or drag)
- Pending → Tap on finger up within configurable time & distance thresholds
- Pending → Dragging when movement exceeds drag threshold (left button held)
- Dragging → Idle on finger up (left button released)
See docs/ARCHITECTURE.md for the full technical design.
dotnet test19 xUnit tests covering WacomMT API integration, device detection, toggle behavior, and
state management. Tests use a shared WacomMTFixture since the WacomMT API is a
process-global singleton.
Application code: MIT. Wacom SDK samples are included under their original license (see each submodule's LICENSE file).