hansschmucker: I've marked the above answer as correct since this is usually the right answer.
But in case somebody is suffering from the same issues as me:
It really is due to Gex always using the first port when it should be using the first port with something plugged in.
And for some strange reason, the XBox360 controller always seems to use the first port, even when the controller is off. So if you have an XBox360 controller AND another kind of controller that you would want to use, it will still try to use the non-connected XBox360 controller instead of the second one.
I've solved the issue with a wrapper for WinMM.DLL. I've kept things simple and a little hackish, but it works:
http://www.tapper-ware.net/data/files/gex/GexControllerFix.zip In the download are three files.
PatchGEX.exe changes the reference to WinMM.DLL to LinMM.DLL in the GEX.exe file, causing it to use the second file included in the archive.
LinMM.DLL passes most stuff directly back to the real WinMM.DLL, but the joystick functions get redirected to the third file instead.
WinMMProxy.DLL does a search for a CONNECTED controller when an application starts using it. It will then redirect all following commands to that controller until the application is closed.
Just extract it to your Gex directory and run PatchGEX.
My wireless Xbox 360 controller wasn't working with Gex under Windows 10, and your patch fixed it, thanks!