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.