# Como listar o detectar los puertos serie con Visual Basic 6



## JoaquinZamora (Sep 22, 2006)

Hola Haber si alguien me puede indicar com listar o saber los puertos serie que existen en el pc con Visual Basic 6 que codigo debo utilizar
Gracias


----------



## eidtech (Sep 22, 2006)

Dentro de un ciclo intenta abrir cada puerto del 1 al 255 por ejemplo, para cada puerto: captura el error que se genera cuando tratas de abrir un puerto no existente.. cuando este error no se genere (es decir que el puerto existe y lo puedes abrir) agrega el puerto a un listbox o a lo que quieras y lo cierras. Como resultado tendras los puertos existentes en un listbox, etc.


----------



## JoaquinZamora (Sep 24, 2006)

Muchas gracias por la idea, me ha servido.
Para  lo que necesites puedes contar conmigo


----------



## saynomore_7 (Jun 24, 2009)

Se que es tarde para la respuyesta, pero creo que sirve para alguine que anda buscando alguna solucion po estos tiempos.

Yo hice lo siguiente:



1. Crea un form y agrégale un Listbox al form.



2. En el evento Form_Load agrega el siguiente código:




Code Snippet

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    Dim ioports As New List(Of System.IO.Ports.SerialPort)

        For Each portname In My.Computer.Ports.SerialPortNames

            ioports.Add(New System.IO.Ports.SerialPort(portname))

        Next

        For Each port In ioports

            If port.IsOpen Then

                ListBox1.Items.Add(port.PortName)

                port.close()

            End If

        Next

    End Sub

End Class





En este controlador de eventos Load del form lo que haces es recorrer todos los puertos de la colección SerialPortNames disponible mediante la clase My y crearte una colección que luego usarás para ver si están activos. Posteriormente recorrermos cada puerto dentro de esa colección de puertos o Lista de Puertos ioPorts (una colección personalizada de puertos) para verificar si están abiertos, si no lo están no se agregarán al ListBox.

Posteriormente podrás verificar mediante un botón a activar algún puerto o a conectar algún dispositivo, y si está activo deberá aparecerte en el ListBox si usas el mismo método que hemos empleado aquí.

Además como pretendes cerrarlo, en el mismo bucle segundo para recorrer la colección o lista de puertos, podrás hacer que se cierre llamando al método Close de cada port. 

Si simplemente queres saber que puertos hay y no cuales estan abiertos, solo reemplaza:

For Each port In ioports

            If port.IsOpen Then

                ListBox1.Items.Add(port.PortName)

                port.close()

            End If

por:

For Each port In ioports

           ListBox1.Items.Add(port.PortName)




Saludos!


----------



## mechazz (Jul 22, 2009)

mi pregunta no es tan compleja ,necesito saber como mandar a llamar el puerto serial desde c++ pero cheque con lets el puerto serial y no tenia ninguna respuesta luego medi el voltaje y era negativo respecto a tierra es correcto usar la libreria dos.h para el serial con una direccion que enconttre que es 
port=0x3F8; y solo puedo utilizar las terminales 2,3 que son de transmisión y recepcion .


----------



## Alexrun (Abr 2, 2011)

saynomore_7 tu respuesta es exelente y es la forma mas eficiente de trabajar con los puertos COM en un proyecto.


----------



## Black Tiger1954 (Abr 2, 2011)

Esta es la rutina que utilizaba hace tiempo con VB5.
Detecta los puertos disponibles (los que están usados por otro dispositivo no) y además si hay algún modem (cosa que ya no se usa) conectado al mismo.


```
Private Sub LoadComms(Combo As ComboBox, Optional Default As Byte, Optional NotReload As Boolean)
    Dim N As Byte, nIndex As Byte, IniTime As Double, Buffer As String
    If NotReload = False Then
        Combo.Clear
        List2.Clear
        List2.AddItem "Puertos disponibles:"
        nIndex = 0
        For N = 1 To 16
            On Local Error Resume Next
            Buffer = ""
            MSComm1.CommPort = N
            If MSComm1.PortOpen = False Then
                MSComm1.PortOpen = True
                If Err Then
                    Err.Clear
                Else
                    MSComm1.Output = "ATV1Q0" & Chr$(13)
                    If Err Then
                        Combo.AddItem "Puerto serie " & N
                        Combo.ItemData(Combo.NewIndex) = N
                        If Default = N Then nIndex = Combo.NewIndex
                        List2.AddItem "Puerto serie " & N
                        Err.Clear
                    Else
                        IniTime = Timer
                        Do
                            Buffer = Buffer & MSComm1.Input
                            If IniTime + 3 < Timer Then
                                Combo.AddItem "Puerto serie " & N
                                Combo.ItemData(Combo.NewIndex) = N
                                If Default = N Then nIndex = Combo.NewIndex
                                List2.AddItem "Puerto serie " & N
                                Exit Do
                            End If
                            If InStr(Buffer, "OK" & vbCrLf) Then
                                Combo.AddItem "Modem en com  " & N
                                Combo.ItemData(Combo.NewIndex) = N
                                If Default = N Then nIndex = Combo.NewIndex
                                List2.AddItem "Modem en com " & N
                                Exit Do
                            End If
                        Loop
                    End If
                End If
                MSComm1.PortOpen = False
            End If
        Next
    Else
        If Combo.ListCount > 0 Then
            For N = 0 To Combo.ListCount - 1
                If Combo.ItemData(N) = Default Then
                    nIndex = N
                End If
            Next
        End If
    End If
    If Combo.ListCount > 0 Then
        Combo.ListIndex = nIndex
    End If
End Sub
```


----------

