3

I have a gaming PC running Windows 8.1. It continually has a problem where the order of any connected controllers keeps changing arbitrarily. I've configured numerous games and emulators to expect controllers in a particular order, but when I open up the 'Game Controllers' control panel (i.e. joy.cpl) or run dxdiag I can see that the order of the controllers has changed, messing up all of my bindings.

This only affects games that use DirectInput to read input from controllers. Games using Xinput work correctly.

It's clear to me that these games are using the order in which the controllers are enumerated by DirectInput to determine their order in game. This is the same order in which they appear in the 'Game Controllers' control panel.

Is there anyway to change this order?

The only thing I've found so far is that if I physically disconnect a USB device that either is a controller or provides an interface for a controller (like the Xbox 360 Wireless receiver or a USB bluetooth dongle) and then plug it back in again, those controllers will be moved to the end of the list. But that's all I've got. And I don't know how to make this process automatic. I've tried using devcon command to automatically remove these devices and rescan, and while it works sometimes, oftentimes it reports the computer needs to be rebooted for the devices to be removed, meaning it has no effect on the DirectInput enumeration order.

2 Answers 2

5

After years of having my controller bindings get messed up due to Windows 8.1's arbitrary ordering of controllers and there not being a way to reorder them, I took matters into my own hands and wrote this tool: devreorder

3

There are games that determine order of controllers by JoyID in registry. To change JoyIDs, use program called JoyIDs: https://theairtacticalassaultgroup.com/forum/showthread.php?t=13009

And then there are also games that determine order of controllers by how they are listed in Game Controllers(joy.cpl) here:

enter image description here

One game which does that is Battlefield 2. No matter what IDs your joysticks have, what default controller you chosen in Game Controllers, it will only recognize first 2 joysticks from the list in Game Controllers even if their IDs are 20 and 21 and there are 20 other joysticks connected at IDs 0-19.

In my case it will only recognize Logitech Extreme 3D and vJoy Device but not Arduino Leonardo, even considering that I have Arduino Leonardo set as default device and on ID1: enter image description here

But if I change the order in Game Controllers as I want, it always recognizes first 2 controllers. The problem is that it isn't too obvious how to change order of controllers in Game Controllers.

I order my list of controllers in Game Controllers by uninstalling the device in Device Manager and then unplugging the device and plugging back it. In the case of vJoy, you uninstall devices from the device manager and then enable them back in Configure vJoy tool that is installed together with vJoy. Video demonstration: https://youtu.be/tZTfdY6cW1Q

2
  • Hi there. Can you elaborate more on how to reorder in Game Controller? In my PC, the first listed is a PS3 controller, and 2nd one is a virtual controller from x360ce to emulate Xbox 360 controller from the PS3 controller. How do I get my virtual controller (2nd listed) to the 1st listed?
    – Nur
    Oct 4, 2020 at 11:20
  • @Nur Open device manager, find your PS3 Controller's HID device in Human Interface Devices list and uninstall it. Here's how I'd uninstall my MOMO Racing wheel if I needed to: i.imgur.com/4cqbmFj.png . Then press right mouse button on any entry in Device Manager and choose Scan for Hardware Changes: i.imgur.com/5ThNFdS.png . The uninstall device should appear in the device manager again and should be at the end of the list in the Game Controllers list.
    – KulaGGin
    Oct 5, 2020 at 12:27

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .