1

我正在编写一个简单的代码来查找Windows平台中的USB转串口,如果端口是我想要的(可以通过VID / PID编号过滤),那么程序将打开端口。

我使用 MonkeyBread 插件 WinUSBDeviceMBS,具有 VendorID 和 ProductID 属性,我可以选择特定的 USB 端口。示例代码如下。

Dim devices() As WinUSBDeviceMBS = WinUSBDeviceMBS.devices
For Each d As WinUSBDeviceMBS in devices
    msgbox d.vendor+"-" + str(Hex(d.VendorID),"0000") + " " +d.product+"-" + str(Hex(d.ProductID),"0000")+d.serialnumber
Next
'this will give you a message box with "FTDI-0403 FT232R USB UART-6001 A60251HV"

此外,在 Serial.serialport.Name 的帮助下,我可以获得串行设备的 COM 端口名称。暗我,计为整数计数 = System.SerialPortCount

for i = 0 to count - 1
    Msgbox System.SerialPort( i ).Name
next 
'this will popup msgbox with "COM1" or "COM3"... all the valid port number, but no vendor info or product info

但我找不到将这两者匹配在一起的方法。有任何想法吗?

4

1 回答 1

1

假设您只使用 Windows,您将需要使用注册表来获取此信息。

您可以在此处获取系统上所有 COM 端口的列表:HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM。值将根据其类型列出,因此真正的串行端口将显示名称 \Device\Serialn 和数据 COMxx,其他设备可能不同。如果您查看此处,您可以找到一个名称,您可以使用该名称来过滤 COM 端口属于哪种类型的设备,然后只需在您的应用程序中列出这些。

您可以在 Xojo 中执行此操作,方法是使用以下Declare语句挂钩到 Windows DLL 的 API: https ://docs.xojo.com/index.php/Declare

这是关于 Registry API 函数的文档,它们将按此处所述使用,但使用Declare上面提到的语句:http: //support.microsoft.com/kb/145679

于 2013-11-11T04:31:32.680 回答