Quick answer: Test with the OS Game Controller panel first (joy.cpl). If detected there but not in your game, the engine isn’t using XInput. If not detected anywhere, reinstall the driver via Device Manager.

A player downloads your game, plugs in an Xbox Controller, and the game says “No controller detected.” The controller works in Windows 11’s built-in Xbox menu and in other Steam games. Something about your game’s input handling is missing the controller.

Layer 1: Windows Sees the Controller

Have the player run:

Win+R → type "joy.cpl" → Enter

The Game Controllers panel lists detected controllers. If the Xbox Controller doesn’t appear here, the OS-level driver is broken. Have them:

  1. Open Device Manager.
  2. Find Xbox Controller under Human Interface Devices or Xbox Peripherals.
  3. Right-click → Uninstall device, then Action → Scan for hardware changes.
  4. If wireless, unpair and re-pair via Settings → Bluetooth.

Layer 2: XInput Sees the Controller

Write a 20-line probe to call XInputGetState:

// xinput_probe.cpp
#include <Xinput.h>
#include <stdio.h>
#pragma comment(lib, "Xinput.lib")

int main() {
    for (int i = 0; i < 4; ++i) {
        XINPUT_STATE state{};
        DWORD r = XInputGetState(i, &state);
        printf("Slot %d: %s\n", i,
            r == ERROR_SUCCESS ? "connected" : "empty");
    }
}

If all four slots are empty even with a controller plugged in, XInput isn’t recognizing it. Could be a non-XInput device (third-party controllers using DirectInput only). If at least one shows connected, your engine’s XInput wiring is the suspect.

Layer 3: Engine Wiring

Engines differ:

Game Bar Conflict

Windows 11’s Game Bar sometimes claims controller exclusivity in certain modes. Have the player disable it: Settings → Gaming → Xbox Game Bar → Off. Restart the game. If detection returns, the conflict was real.

Third-Party Wireless Adapters

For Xbox Wireless Adapter for Windows, the driver should auto-install. If not:

Reporting Path

Include in your support docs:

  1. Run joy.cpl — does the controller appear?
  2. If yes: report your game version. If no: describe Device Manager state.
  3. Wired or wireless? If wireless: pair info.

Most reports resolve at step 1 with a driver reinstall.

Verifying

After fix, plug in the controller, launch your game, press A. The character should jump (or whatever your bind is). joy.cpl should show input on the corresponding test stick.

“Three layers: OS, XInput API, engine. Test bottom up to find which one is dropping the controller.”

Ship a small “controller probe” debug screen in your game — helps support diagnose detection issues without screen-sharing.