|
在使用usb2com这种设备的时候
往往不能知道该设备的端口号,例如将扫描枪插入第一个usb口的时候,会生成com4口,插入第二个usb端口的时候会生成com5口
那么在程序设计中我们就需要判断其端口号,然后进行端口赋值
思路一,对所有端口进行遍历,根据遍历的端口名称确定端口号,问题,时间慢,效率低
思路二,读取注册表,根据主键名称的值来判别端口号
本来想用 wscript.regread 直接读取键值的内容的,结果因为键值名称中为“\Device\Spccom1”,我就郁闷,你一个好好设备,干啥取名这么敏感,还含有"\",导致wscript读取出错。
只好反复测试,最终使用api进行读取
以下是引用别人的api读取注册表函数,这里只是对端口号如何读取做以结合
串口的路径为 HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM
根据自己需要段端口进行名称判断,然后读取所需值
Dim hKey As Long, strValue As String
Dim lresult As Long, lType As Long, lBufferSize As Long, strBuff As String
Dim sType As String, sValue As Variant, lData As Long
Dim i As Integer
lMainKey = GetMainKey("HKEY_LOCAL_MACHINE")
RegOpenKey lMainKey, "HARDWARE\DEVICEMAP\SERIALCOMM", hKey
strValue = "\Device\Spccom1"
lresult = RegQueryValueEx(hKey, strValue, 0, lType, ByVal 0, lBufferSize)
If lresult = 0 Then
If lType = REG_SZ Then
'Create a buffer
strBuff = String(lBufferSize, Chr$(0))
'retrieve the key's content
lresult = RegQueryValueEx(hKey, strValue, 0, REG_SZ, ByVal strBuff, lBufferSize)
If lresult = 0 Then
'Remove the unnecessary chr$(0)'s
sValue = Left$(strBuff, InStr(1, strBuff, Chr$(0)) - 1)
End If
end if |
|