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