用VB怎么读取当前的所有COM口(就是在设备管理器里看到的所有端口),然后放到下拉列表框里,比如COM1
COM2
COM3
COM4
COM5
COM6
...请大侠们帮帮忙,先谢过!

解决方案 »

  1.   


    Option Explicit
    '添加一个按钮Command1和一个MSComm控件:mscP
    Private Sub Command1_Click()
        Dim intP As Integer
    On Error GoTo errSub
        For intP = 1 To 256
            mscP.CommPort = intP
            mscP.PortOpen = True           '这是关键语句,当执行打开不存在的串口时会发生错误,跳出循环
            Debug.Print "COM" & CStr(intP)
            mscP.PortOpen = False
        Next intP
    errSub:
        
    End Sub
      

  2.   

    你把这个语句放到窗体的Load中,执行一次,它就可以把所有串口列出来了。
      

  3.   

    实际用的时候,可能会是 1-16口,其它几个COM口在使用,自己选没用的来用,
      

  4.   


    '引用 MicroSoft WMI Scripting V1.2 Library
    For Each s In GetObject("Winmgmts:").InstancesOf("Win32_SerialPort")
        ListBox.AddItem s.DeviceID
    Next s
    涉及到硬件的东西,用 WMI 比较好。
      

  5.   


    '引用 MicroSoft WMI Scripting V1.2 Library
    For Each s In GetObject("Winmgmts:").InstancesOf("Win32_SerialPortConfiguration")
        Debug.Print s.Name & IIf(s.IsBusy, " 忙", " 闲")
    Next s
      

  6.   

    报错提示
    for each 控件变量必须为变体或对象该怎么弄呢,我放LOAD事件里了
      

  7.   

    只列出来了 COM1 和COM2  其它的端口都没有显示出来
      

  8.   

    HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM下会有类似 \Device\Serial0 的键名,读取其键值,如 COM1。
      

  9.   


    那就是说现在的系统内只有 COM1 和 COM2,WMI 就是调的系统库。我的机器上运行后只有 COM1。
      

  10.   

    试了WMI,对USB-RS232的端口没有识别出来
      

  11.   

    USB-RS232的端口是需要安装驱动的.
      

  12.   

    在网上找到的代码测试可以用,谢谢楼上的各位了If MSComm.PortOpen = True Then MSComm.PortOpen = False
    For i = 1 To 16
        On Error Resume Next
       '当运行发生错误时,控件转到紧接着发生错误的语句之后的语句,并在此继续运行
        MSComm.CommPort = i
        MSComm.PortOpen = True
        Select Case Err.Number
           Case 0                       
             Combo1.AddItem "COM" & Trim(i)
             MSComm.PortOpen = False
           Case 8005                
             Combo1.AddItem "COM" & Trim(i) & " 被占用"
             MSComm.PortOpen = False
        End Select
        Err = 0     
    Next