Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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
Serial port 在Xojo中读取USB到串行端口信息_Serial Port_Usbserial_Xojo - Fatal编程技术网

Serial port 在Xojo中读取USB到串行端口信息

Serial port 在Xojo中读取USB到串行端口信息,serial-port,usbserial,xojo,Serial Port,Usbserial,Xojo,我正在写一个简单的代码来查找Windows平台中的USB到串行端口,如果该端口是我想要的(可以通过VID/PID号进行过滤),那么程序将打开该端口 我使用MonkeyBread插件WinUSBDeviceMBS,属性为VendorID和ProductID,可以选择特定的USB端口。示例代码如下 Dim devices() As WinUSBDeviceMBS = WinUSBDeviceMBS.devices For Each d As WinUSBDeviceMBS in devices

我正在写一个简单的代码来查找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端口名。 dim i,计数为整数 count=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

但是我找不到一个方法来匹配这两个。有什么想法吗?

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

您可以在此处获得系统上所有COM端口的列表:
HKEY\U LOCAL\U MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM
。值将根据其类型列出,因此实际串行端口将显示名称\Device\Serialn和数据COMxx,其他设备可能不同。如果您查看此处,您可以找到一个名称,用于筛选COM端口属于哪种类型的设备,然后只需在应用程序中列出这些名称即可

您可以在Xojo中通过使用
Declare
语句钩住Windows DLL的API来实现这一点:

这是一个关于注册表API函数的文档,它们将按此处所述使用,但使用上面提到的
Declare
语句:

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

您可以在此处获得系统上所有COM端口的列表:
HKEY\U LOCAL\U MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM
。值将根据其类型列出,因此实际串行端口将显示名称\Device\Serialn和数据COMxx,其他设备可能不同。如果您查看此处,您可以找到一个名称,用于筛选COM端口属于哪种类型的设备,然后只需在应用程序中列出这些名称即可

您可以在Xojo中通过使用
Declare
语句钩住Windows DLL的API来实现这一点:

这是一个关于注册表API函数的文档,它们将按此处所述使用,但使用上面提到的
Declare
语句:

是的,在VB.NET中,我使用类似的方法读取winmgnt:\\.\。。。去读那本书。但是,我不知道如何用Xojo编写代码。正如您在阅读注册表时提到的,您能给出一个示例代码吗?ThanksCheck更新了注释,您需要通过Declare语句使用注册表函数。谢谢!顺便说一句,你知道MacOSX提供了类似的功能让程序员做同样的工作吗?这要看情况而定。由于在OSX上,该设备将显示为tty设备,因此将有所不同。我知道一些供应商的转换器将显示为ttyUSB0,而其他转换器可能显示为特定于供应商的,因此这将取决于您的设备。如果您知道VID/PID并从那里检查tty设备名称,那么可能有一种方法可以通过系统探查器进行跟踪,以获取VID/PID-希望这会有所帮助。是的,在VB.NET中,我使用类似的方法读取winmgnt:\\.\.\。。。去读那本书。但是,我不知道如何用Xojo编写代码。正如您在阅读注册表时提到的,您能给出一个示例代码吗?ThanksCheck更新了注释,您需要通过Declare语句使用注册表函数。谢谢!顺便说一句,你知道MacOSX提供了类似的功能让程序员做同样的工作吗?这要看情况而定。由于在OSX上,该设备将显示为tty设备,因此将有所不同。我知道一些供应商的转换器将显示为ttyUSB0,而其他转换器可能显示为特定于供应商的,因此这将取决于您的设备。如果您知道VID/PID并从那里检查tty设备名称,可能有一种方法可以通过系统探查器进行跟踪,以获取VID/PID-希望这有帮助。