Troubleshooting the game controller input module
An Xbox-class pad polls without error but never reports a real value
Cause. DirectInput only delivers changing data for an XInput-class pad while the acquiring process owns the Windows foreground window. A background capture host like HEAT Capture never does. Measured directly against this module: an Xbox One pad polled at 4ms over 5-second phases returned 322 samples with exactly 1 distinct value while hidden or unfocused, and 322 samples with 322 distinct values only while its window was foreground. Ordinary HID controllers (tested with a T.Flight Hotas X) are not gated this way and report normally in the background throughout.
After 500 samples with a single unchanging value, this module logs the diagnosis itself:
DirectInput has returned {N} samples with a single unchanging value for {Device}. XInput-class
pads only deliver DirectInput data to the foreground application, which a background capture
host never is. Select the XInput entry for this device instead.Fix. Select the XInput entry for that controller in DeviceId (or leave UseXInput enabled
and DeviceId empty to capture every device). This does not affect genuine joysticks, wheels or
flight sticks, which work correctly over DirectInput in the background.
No controllers are found at all
Cause. Either nothing was connected before the capture session started, or DeviceTypes
does not include the category the connected controller enumerates as (a wheel enumerating as
Driving when only Gamepad is selected, for example).
Fix. Confirm the controller is connected and Windows recognises it before starting the
session; broaden DeviceTypes if unsure which category it falls under.
The wrong entry was picked from the device dropdown
Cause. A controller that is both a DirectInput device and an XInput slot appears twice in the
DeviceId dropdown. Picking the DirectInput entry for an Xbox-class pad reproduces the
foreground-only symptom above; there is no automatic fallback between the two.
Fix. Pick the XInput entry for any Xbox-class controller. Reserve the DirectInput entry for controllers that are not also XInput devices.
A quick button tap never shows up
Cause. Button edges are only computed when this module’s own capture call runs, at the
Interval setting’s cadence - not at the faster PollIntervalMs the background thread samples
at. A press and release that both complete inside one Interval window leaves no trace: the
state read at the next call is already back to released, identical to a button that was never
touched.
Fix. Lower Interval closer to PollIntervalMs if catching brief taps matters - see
Configure.