Switch Pro Controller / Joy-Con Not Working on PC — Emulator Setup Guide
I connected my Nintendo Switch Pro Controller or Joy-Cons to my PC via USB or Bluetooth, but my emulator (Eden, Dolphin, RetroArch, Cemu, or PCSX2) doesn't detect them or the buttons are scrambled. Nintendo controllers use neither XInput nor standard DInput on Windows — they need a driver wrapper to work. What's the fix?
Solutions
solution #867
BetterJoy (by Davidobot) is the most reliable open-source tool that converts Switch Pro Controller and Joy-Cons into virtual XInput controllers on Windows. This makes them work in any emulator that supports Xbox controllers.
- Download BetterJoy from the GitHub releases page (search "BetterJoy GitHub Davidobot"). Download the latest
BetterJoy_X.X.zip. - Extract to a permanent folder (e.g.,
C:\BetterJoy\). - Install the ViGEmBus driver if not already installed (required for the virtual XInput controller). The BetterJoy release page links the ViGEmBus installer.
- Run
BetterJoy.exe. - USB connection: Plug in the Pro Controller — BetterJoy detects it instantly.
- Bluetooth connection: Hold the small sync button on the top of the Pro Controller until the LEDs cycle, then pair in Windows Bluetooth settings. BetterJoy detects it after pairing.
- Open your emulator — it sees a virtual Xbox 360 Controller (XInput device).
Joy-Cons: Pair each Joy-Con separately via Bluetooth (small sync button on each). BetterJoy can combine a left + right Joy-Con into a single virtual controller. In BetterJoy's UI, select Combined mode.
solution #868
If Steam is installed, Steam Input natively supports the Switch Pro Controller without any third-party driver.
- Open Steam → Settings → Controller → General Controller Settings.
- Enable Switch Pro Configuration Support.
- Connect the Pro Controller via USB or Bluetooth — Steam detects it.
- Add your emulator as a Non-Steam Game (Library → Add a Game) and launch it through Steam.
- Steam Input presents the Pro Controller as an XInput device to the emulator.
Limitation: requires Steam to be running in the background and the emulator launched through Steam. For a system-wide solution independent of Steam, BetterJoy is better.
solution #869
Eden (the Switch emulator, formerly Yuzu) has built-in Switch Pro Controller support via SDL2 — the best setup for Switch emulation specifically.
- Connect the Pro Controller via USB only for the most reliable detection in Eden (Bluetooth Pro Controller on PC can be finicky with Eden's native mode).
- In Eden: System → Input Settings → Player 1 → Input Device → select Pro Controller from the dropdown. Eden maps buttons automatically.
- No BetterJoy or Steam Input needed when using Eden's native mode.
- For Amiibo support: System → Input → Player 1 → Create Amiibo (Eden supports virtual Amiibo from bin files — no NFC reader required).
Joy-Con with Eden: Connect each Joy-Con via Bluetooth, then in Eden Input settings select Left Joycon for Player 1 and Right Joycon for Player 2, or select Dual Joycons to combine them into one player. This mirrors the physical Switch behavior exactly.
solution #870
RetroArch:
- With BetterJoy or Steam Input active: RetroArch auto-configures the virtual XInput device. Go to Settings → Input → Port 1 Controls to verify.
- RetroArch 1.16+ on Windows includes experimental native Switch Pro Controller support via HID — go to Settings → Input → Joypad Autoconfig and look for the Pro Controller. Works without BetterJoy if the built-in HID driver loads it (results vary by Windows version).
Dolphin:
- Dolphin has experimental native Switch Pro Controller support via Bluetooth passthrough. Go to Options → Controller Settings → GameCube Controllers → Port 1 → Standard Controller → Configure. If the Pro Controller appears as a DInput device directly, map it manually.
- More reliably: use BetterJoy or Steam Input to present it as XInput, then Dolphin's auto-map works instantly.
- For Wii emulation in Dolphin: Wii Remote → Emulated Wii Remote → map IR pointer to the right analog stick and A/B buttons to the face buttons.
Comments (0)
Sign in to_leave_comment