Autor Tema: En VB6 como detectar cuantos puertos COM estan disponibles en el PC??  (Leído 34132 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: En VB6 como detectar cuantos puertos COM estan disponibles en el PC??
« Respuesta #15 en: 04 de Junio de 2007, 17:08:20 »
Si es cierto!!! La mejor forma seria la siguiente :

El programa pide que desconecte el dispositivo. y lee los puertos actuales.

El programa pide que conecte el dispositivo. El programa mira cual es el nuevo que se conecto y listo!!!! Ya sabe cual es el de la aplicación.

Estoy trabajando pero en arreglar mi disco duro. Apenas tenga algo, intento esa parte.

Desconectado PalitroqueZ

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: En VB6 como detectar cuantos puertos COM estan disponibles en el PC??
« Respuesta #16 en: 04 de Junio de 2007, 17:13:43 »
ya que estas en esa parte, hay una duda que me surge:

con la api que te mencioné y creo que con el programa de arriba haces la detección, pero... ¿son los puertos en caliente? o ¿son los instalados en la máquina?

pregunto, porque cuando usaba el snoopy pro, éste me mostraba todos los puertos instalados estando y no estando conectados el/los dispositivo(s).

tendras que probarlo y nos cuentas.

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: En VB6 como detectar cuantos puertos COM estan disponibles en el PC??
« Respuesta #17 en: 04 de Junio de 2007, 21:47:01 »
Amigo pedro, cuando tu me mostraste lo del api, y al probarlo, note que este muestra todos los puertos que han sido instalados en el PC, me explico.

Cuando se tienen los conversores USB-RS232, ellos detectan cual numeracion es la que lleva en COM WINDOWS, siempre que instalas uno nuevo, incrementa el numero, hace unos dias, llegaba hasta COM12. Pero OJO esos COM solo están disponibles cuando conectas el dispositivo y el Windows le da el COM correspondiente a cuando le instalaste.

Cuando corrí la aplicación de Visual Basic, este me mostró desde COM1 hasta COM12, pero en el PC solo estaba COM1 (el de la board) y COM 6 que es el de mi USB-RF.

Debe haber una forma de ver solo los que estan disponibles.

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: En VB6 como detectar cuantos puertos COM estan disponibles en el PC??
« Respuesta #18 en: 05 de Junio de 2007, 03:35:09 »
Pues es perfecto si sabes el nº de puertos com que tienes en tu ordenador...pues sólo tienes que hacer un bucle que pase por todos preguntando si estan ocupados o no...con el método busy o si lo prefrieres tambien puedes conectarte a todos usando el método connected si te devuelve un false es que ya lo esta usando otro dispositivo y lo mismo pasa con busy si te devuelve un true es que ya está siendo utilizado por otro dispositivo.

Es lo unico que se me ocurre  :mrgreen: :mrgreen: :mrgreen: :mrgreen:

Un saludete.

Desconectado odukec

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 174
Re: En VB6 como detectar cuantos puertos COM estan disponibles en el PC??
« Respuesta #19 en: 05 de Junio de 2007, 10:43:48 »
Hola

Pues con el codigo que postee anteriormente, se que puertos estan disponibles (no estan ocupados y existen), lo unico es que si tengo abierto un com en otro proceso, este no es detectado.

Saludos

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: En VB6 como detectar cuantos puertos COM estan disponibles en el PC??
« Respuesta #20 en: 05 de Junio de 2007, 11:44:59 »
C4 no había intentado con el busy, apenas puedo pruebo, esa en convinacion con el código de odukec, seguro funciona para detectar cual es el COM que necesito.

Gracias!

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: En VB6 como detectar cuantos puertos COM estan disponibles en el PC??
« Respuesta #21 en: 15 de Agosto de 2007, 17:57:57 »
Hola

Necesitaba hacer lo mismo en una aplicación y probé el método de Odukec en VB6, tuve problemas de compilación con unas variables public; no se dejaba compilar.

Hice unos cambios... ahora todo se puede compilar en una sola form.

Código: [Seleccionar]
'Programa que indica que puertos hay disponibles en la pc

Public i As Integer 'hace el rastreo de puertos

'------------------------------------------------------------------------------
'Variables y funciones usadas para detectar disponibilidad de puertos COM
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Private Type SECURITY_ATTRIBUTES
    nLength As Long
    lpSecurityDescriptor As Long
    bInheritHandle As Long
End Type
 
'Entrega True si el puerto está disponible y False en caso contrario
Private Function COMAvailable(COMNum As Integer) As Boolean
    Dim hCOM As Long
    Dim ret As Long
    Dim sec As SECURITY_ATTRIBUTES

    hCOM = CreateFile("\.\COM" & COMNum & "", 0, &H1 + _
        &H2, sec, 3, &H80, 0)
    If hCOM = -1 Then
        COMAvailable = False
    Else
        COMAvailable = True
        ret = CloseHandle(hCOM)
    End If
End Function
'------------------------------------------------------------------------------


Private Sub Command1_Click()
    Combo1.Clear 'limpia combo1
    For i = 1 To 16 'busca del com1 al com16 (MSCOMM vb6 solo admite hasta 16)
        If COMAvailable(i) Then 'checa puerto por puerto
            Combo1.AddItem "COM " & i 'si existe lo agrega a la lista
        End If
    Next
End Sub

Pueden encontrar los archivos del proyecto en

http://todopicsan.4shared.com

Incluso funciona bajo winxp y usando puertos com virtuales (usb-232, tibbo, etc.). El detalle es que hay que poner los puertos virtuales justo después del último com instalado; por ejemplo, si hay com1, el virtual debe ser com2. Intenté poner un com16 y no lo detectó.

Gracias Odukec

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: En VB6 como detectar cuantos puertos COM estan disponibles en el PC??
« Respuesta #22 en: 15 de Agosto de 2007, 18:03:38 »
Gracias migsantiago!!   :-/