Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 给定COM端口,如何查找USB串行适配器的序列号?_Windows_Serial Port_Usb - Fatal编程技术网

Windows 给定COM端口,如何查找USB串行适配器的序列号?

Windows 给定COM端口,如何查找USB串行适配器的序列号?,windows,serial-port,usb,Windows,Serial Port,Usb,我想从Windows COM端口名COM11获取USB设备的序列号,该USB设备提供我目前正在使用FTDI适配器的COM端口,如果这很重要的话 我可以使用SetupDiGetClassDevs&GUID\u DEVCLASS\u PORTS,NULL,NULL,DIGCF\u PRESENT来枚举系统上的端口,然后我可以使用SetupDiEnumDeviceInfo和SetupDiGetDeviceRegistryProperty从硬件ID中获取vid/pid 但我似乎想不出一个方法来获得序列号

我想从Windows COM端口名COM11获取USB设备的序列号,该USB设备提供我目前正在使用FTDI适配器的COM端口,如果这很重要的话

我可以使用SetupDiGetClassDevs&GUID\u DEVCLASS\u PORTS,NULL,NULL,DIGCF\u PRESENT来枚举系统上的端口,然后我可以使用SetupDiEnumDeviceInfo和SetupDiGetDeviceRegistryProperty从硬件ID中获取vid/pid

但我似乎想不出一个方法来获得序列号

我们的目标是使用序列号对串行适配器进行编程,以识别其在模拟器程序中的用途,这样用户就不必知道哪个适配器是哪个COM端口。

您可以尝试使用SetupDiGetDeviceInstanceId获取USB设备的设备实例ID,它应该是一个格式为USB\VID\U xxxx和PID\U xxxx\[ID]的字符串。如果您的USB设备不是复合设备,则[ID]将是序列号。这是获取USB设备序列号的方式

如果您的设备是复合设备,则串行端口将是一个子设备,您必须向上查找表示实际USB设备的父设备,该设备应具有您关心的设备实例ID

在编写任何代码之前,我建议检查设备管理器中的设备实例ID,即设备实例路径

为了让您更好地从包含其他信息的字符串中提取序列号,Microsoft在此处记录了设备实例ID:

这一页可能会有帮助。