Office中国论坛/Access中国论坛
标题:
vba自动识别串口号方法分享
[打印本页]
作者:
没牙兔兔
时间:
2009-3-3 12:56
标题:
vba自动识别串口号方法分享
在使用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
作者:
andymark
时间:
2009-3-3 13:44
谢谢分享~~
作者:
rcylbx
时间:
2009-3-3 14:53
先学习了
作者:
chaojianan
时间:
2009-3-3 16:01
收藏了备用。
谢谢分享。
作者:
没牙兔兔
时间:
2009-3-3 22:31
各位同仁
软硬结合的程序才是最赚钱的,嘻嘻
纯软件别人无法理解为啥这么贵
所以多做做硬件编程吧
没有你想象的那么复杂的
作者:
meteorxp
时间:
2009-4-10 09:05
谢谢
作者:
790729
时间:
2009-4-17 16:30
正急需,谢谢@
作者:
82077802
时间:
2009-4-17 16:34
谢谢分享~~
作者:
laowu
时间:
2010-2-27 09:45
非常有用的资料
作者:
xryacc2
时间:
2010-2-27 18:50
我对API很不熟悉,在GetMainKey时出错,请问是否要引用什么?
作者:
goto2008
时间:
2010-3-4 11:34
收藏
作者:
lirong
时间:
2011-9-8 20:31
来个例子行不?
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/)
Powered by Discuz! X3.3