我在做一个串口的通讯程序,想要知道当前可用的串口总数,和串口定义。
请高手赐教。
在线等待。多谢!

解决方案 »

  1.   

    ' 可用的串口总数保存在注册表中,读一下就行了。Option Explicit
    Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
    Private Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As Long
    Private Const HKEY_LOCAL_MACHINE = &H80000002Private Sub Command1_Click()
        Dim ret As Long, REG As Long, i As Long
        Dim ValueName As String, lValueName As Long, ValueType As Long
        Dim cntCOM As Long
        RegOpenKey HKEY_LOCAL_MACHINE, "HARDWARE\DEVICEMAP\SERIALCOMM", REG
        cntCOM = 0
        i = 0
        Do
            ValueName = String(255, Chr(0))
            lValueName = 256
            ret = RegEnumValue(REG, i, ByVal ValueName, lValueName, 0, ValueType, ByVal 0&, ByVal 0&)
            If ret = 0 Then
                cntCOM = cntCOM + 1
                i = i + 1
            Else
                Exit Do
            End If
        Loop
        MsgBox "本机有" & CStr(cntCOM) & "个COM口可用!"
    End Sub
      

  2.   

    ' 上面那个好像复杂了点,我又重新写了个函数,放到标准模块中就可以调用了。Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
    Private Declare Function RegQueryInfoKey Lib "advapi32.dll" Alias "RegQueryInfoKeyA" (ByVal hKey As Long, ByVal lpClass As String, lpcbClass As Long, ByVal lpReserved As Long, lpcSubKeys As Long, lpcbMaxSubKeyLen As Long, lpcbMaxClassLen As Long, lpcValues As Long, lpcbMaxValueNameLen As Long, lpcbMaxValueLen As Long, lpcbSecurityDescriptor As Long, lpftLastWriteTime As FILETIME) As LongType FILETIME ' 8 Bytes
        dwLowDateTime As Long
        dwHighDateTime As Long
    End TypeConst HKEY_LOCAL_MACHINE = &H80000002' 获得当前系统的 COM 口的数量
    Function GetCOMCount() As Integer
    Dim ret As Long, f As FILETIME, cntCOM As Long
    RegOpenKey HKEY_LOCAL_MACHINE, "HARDWARE\DEVICEMAP\SERIALCOMM", ret
    RegQueryInfoKey ret, "", 0, 0, 0, 0, 0, cntCOM, 0, 0, 0, f
    GetCOMCount = cntCOM
    End Function