I have had the same issue with USB cameras. They also tend to just create another instance/entry for the device under windows with an appended number (example: Epson Blah Blah #1) as soon as the device is moved to another USB port.
The answer most probably lies in the Device Descriptors. More specifically the HardwareID of the device.
For a quick way to see a device's HardwareID go to Control Panel > Device Manager (if Win7 or above) then right-click on the device whether it be a USB Flashdrive or USB Camera. Click on properties and goto the "Details" tab. Change the "Property" value to "Hardware Ids". You will see the HardwareIDs
You can find more information on that here:
https://msdn.microsoft.com/en-us/library/windows/hardware/ff539283%28v=vs.85%29.aspx
and:
https://msdn.microsoft.com/en-us/library/windows/hardware/jj649944%28v=vs.85%29.aspx
The latter talks about the registry keys where you can also find the information of a device. The key would be:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\\\Device Parameters
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB
So if you can link HardwareIDs to a printer then you would be able to enumerate installed printers to compare with then select the one you want. So you will install a printer initially and let your application select that printer and save its HardwareID. Then everytime devices change on the PC you can just get the one that correlates to the initially installed printer.
I have not tested this as I am currently without two exactly same devices to make sure both don't have the same Hardware Ids.