GlobalInputBridge
A Windows UE5 input plugin that feeds global keyboard/mouse input to the game thread regardless of window focus — your UE app keeps receiving input while running in the background.
What it is
GlobalInputBridge is a Windows-only Unreal Engine input plugin. Its core capability is delivering window-focus-independent global keyboard/mouse input to the game thread — even when the UE application is running in the background.
Target scenarios: UE running as a companion app behind foreground software — VTuber streaming (mirroring aim and movement while playing an FPS), macro panels, input analytics, overlay tools, and more.
Headline feature: mouse aim deltas keep flowing even when the foreground game is an FPS that uses raw input and locks the system cursor to the screen center (e.g. Hunt: Showdown) — because the movement data comes from WM_INPUT raw relative deltas, the exact same data the game itself reads.
The plugin is a purely passive reader: it never injects or synthesizes input, and it does not replace Enhanced Input in your project.
Features
- Global keyboard: background Windows Raw Input worker thread (RIDEV_INPUTSINK) receives keys regardless of focus; multi-device aggregation and hot-plug handling
- Global mouse movement: four tracking modes, Raw Input by default — immune to cursor locking, pointer acceleration, and DPI scaling; alternatives are Polling (desktop pixel deltas), Buttons Only, and Disabled
- Event nodes: Enhanced-Input-style lifecycle (Started / Triggered / Completed), modifier-key combos, optional exclusive-modifier exact matching — no manual Bind/Unbind needed
- State queries, broadcast events, and event filtering (allow/exclude lists affecting broadcasts only, not state tracking)
- Debug support, an override-state manager, chord bindings, key mappings, and automated tests that run inside the editor
Key Blueprint nodes
| Category | Nodes |
|---|---|
| Subsystem | Get Engine Subsystem → GlobalInputSubsystem, Start Listening |
| State queries | Is Global Key Down, Was Global Key Pressed/Released This Frame, Get Pressed Global Keys |
| Mouse | Get Global Mouse Delta, On Global Mouse Move |
| Events | Global Input Action Event (purple node), On Global Key Event |
| Filtering | Set Global Input Event Filter, Clear Global Input Event Filter |
| Debug | Get Global Input Debug Info, Set Log Level |
Installation
- Clone or download the repository into
<YourProject>/Plugins/GlobalInputBridge - Regenerate project files and compile (or just launch the project and let the editor build it)
- Enable the plugin; settings live under Project Settings > Plugins > Global Input Bridge
Requirements: UE 5.7 (developed and tested; other UE 5.x versions untested); Windows x64 only.
Quick start
- The plugin ships with a DemoMap (Content folder) containing Blueprint examples of every feature
- Enable Auto Start in settings, or call Start Listening yourself (commandlets and dedicated servers never auto-start)
- Continuous behavior → poll
Is Global Key Down; one-shot behavior → check the pressed/released frame edges - Mouse aim → read
Get Global Mouse Deltaevery tick, or bindOn Global Mouse Move - Typical aim-mirroring pipeline: accumulate mouse deltas per tick → multiply by a sensitivity factor → drive the Aim Offset. Note that Raw Input deltas are device counts (no pointer acceleration) — calibrate the scaling yourself
Mouse tracking modes
| Mode | Movement delta | In cursor-locked games |
|---|---|---|
| Raw Input (default) | WM_INPUT raw relative counts | Works |
| Polling | Desktop pixel difference | Zero deltas |
| Buttons Only | None | On Global Mouse Move never broadcasts |
| Disabled | None | Keyboard listening is unaffected in all modes |
Technical notes
- Threading: a dedicated worker thread runs a hidden Win32 message window and registers keyboard/mouse device collections with RIDEV_INPUTSINK; packets travel through a single-producer/single-consumer queue and are consumed on the game thread by the engine subsystem’s tick
- Registration heartbeat (key design): Windows allows only one Raw Input target window per device class per process — last one registered wins. UE’s own viewport high-precision mouse mode repeatedly claims that slot, so whenever mouse Raw Input is enabled the worker thread re-registers itself on a 500ms heartbeat after input stops flowing (at most half a second of movement data is lost); cross-process registrations never conflict, so the foreground game is unaffected
- Thread safety: all UObject access, state, and Blueprint broadcasts happen on the game thread; the worker thread touches only Win32 APIs and the queue
Limitations
- Windows only (all platform code guarded by PLATFORM_WINDOWS)
- Purely passive — cannot block or modify input, and cannot be used as an input injector
- Raw Input mouse deltas are device counts; scale yourself if you need pixel semantics
- MIT license