• Martes 12 de Noviembre de 2024, 21:26

Autor Tema:  Detectar Dispositivos  (Leído 7993 veces)

scorpion25acv

  • Miembro activo
  • **
  • Mensajes: 30
    • Ver Perfil
Detectar Dispositivos
« en: Domingo 31 de Octubre de 2004, 07:30 »
0
Salu2, Mi consulta es para saber si alguien conoce cómo saber a cual puerto está conectado un dispositivo (En este caso un Modem) por medio de Visual Basic.

Deseo saber si existe alguna funcion de Windows que lo realice, (consultando talvez el mismo registro de windows,) para que me diga, por Ejemplo en cual puerto serie existe conectado un Modem.

Infinitas gracias por su ayuda de antemano ;)

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: Detectar Dispositivos
« Respuesta #1 en: Martes 2 de Noviembre de 2004, 15:01 »
0
Hola scorpion25acv.

Échale un vistazo a esto http://foros.solocodigo.com/index.php?showtopic=6517

Supongo que te servirá.

Abur.

scorpion25acv

  • Miembro activo
  • **
  • Mensajes: 30
    • Ver Perfil
Re: Detectar Dispositivos
« Respuesta #2 en: Viernes 5 de Noviembre de 2004, 08:14 »
0
Salu2, nuevamente.

Brroz, tu ejemplo esta muy interesante, Ahora la duda que tengo es la siguiente:

La funcion: "Private Function MaxComPort() As Integer", si bien analizo, devuelve el numero de puerto mayor que encuentra abriendolo y cerrandolo una vez asignado en la propiedad CommPort durante el ciclo, se genera el error # 8002, por que el puerto no existe,  pero que pasa si mi modem esta en el COM4, o el COM5, que fuera, al llegar al COM3, sale porque el ultimo puerto valido fue el 2, (COM1 y COM2 estan por default, para aquellos visitantes que lean esto y talvez no lo saben).

Tambien esta la situacion en donde el modem que tengo puede ser externo,  conectado al COM1 y/ o talvez un mouse en el COM2 o viceversa, estas situaciones tambien se deben analizar, porque se generan errores como el # 8005, informando que el puerto ya está abierto (a la primera vez del ciclo se sale al probar el com1, y si no hay nada en el com1, se sale en el com2 por l mouse), y si me salto el error, al decirle MSComm1.PortOpen = False, me genera el error # 8012, que dice que no se puede cerrar algo que obviamente no esta abierto, lo anterior lo escribo, por que intenté saltar el error 8005, pensando que habia encontrado al mouse, y que prosiguiera, pero bueno.

Talves me puedas platicar acerca  de las API's que le mencionabas a Piter en la otra ocasion, porque de los casos expuestos anteriormente , me suceden y en el proyecto que realizo, los usuarios no deben de escoger, como se hace usualmente (desde un combo, textbox, etc) el puerto  donde se ubica el modem, que posteriormente paso a la propiedad  "CommPort" > MsComm.CommPort = ?

Asi que las sugerencias, ayudas q me puedan brindar bienvenidas y Brroz, te agradesco que me tomes en cuenta. :hola:

Adjunto el Ejemplo que proporcionaste...
Código: Text
  1.  
  2.  
  3. Private Function MaxComPort() As Integer
  4.  
  5.    On Error GoTo Err_Chk
  6.    Dim int1 As Integer
  7.    For int1 = 1 To 16
  8.        MSComm1.CommPort = int1
  9.        MSComm1.PortOpen = True
  10.        MSComm1.PortOpen = False
  11.    Next int1
  12.  
  13. Exit_Chk:    
  14.    MaxComPort = int1
  15.    Exit Function
  16.    
  17. Err_Chk:
  18.    If Err.Number = 8002 Then
  19.        int1 = int1 - 1
  20.        Resume Exit_Cont
  21.    Else
  22.        MsgBox Err.Description
  23.    End If
  24.  
  25. End Function
  26.  
  27.  
  28.  

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: Detectar Dispositivos
« Respuesta #3 en: Viernes 5 de Noviembre de 2004, 15:31 »
0
Hola.

A ver si a lo largo de la tarde puedo probar estas cosas que me comentas y te digo algo...

Sobre las apis puedes buscar información en el MSDN. Personalmente no las he utilizado nunca y para poder decirte algo con fundamento tendría que informarme y probarlo.

Chao.

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: Detectar Dispositivos
« Respuesta #4 en: Viernes 5 de Noviembre de 2004, 16:44 »
0
Hola scorpion25acv.

Tal vez unas pequeñas modificaciones en el código, obviando el control Comm sirvan para hayar el puerto COM más alto. Yo no tengo módem ni ratón serial para hacer pruebas, pero puedes probarlo tú y contar como te fué... No las tengo todas conmigo de que funcione, pues a pesar de no conocer como funciona internamente el control, supongo que hace algo parecido, abriéndolo como un archivo.
Código: Text
  1.  
  2. Public Function MaxComPort() As Integer
  3.  
  4.     On Error GoTo Err_Chk
  5.     Dim i1 As Integer, iCanal As Integer
  6.     For i1 = 1 To 16
  7.         iCanal = FreeFile
  8.         Open "COM" & i1 For Binary As #iCanal
  9.         Close #iCanal
  10.     Next i1
  11.  
  12. Exit_Chk:
  13.     On Error Resume Next
  14.     Close #iCanal
  15.     MaxComPort = i1
  16.     Exit Function
  17.    
  18. Err_Chk:
  19.     If Err.Number = 53 Then ' (53 el archivo no existe)
  20.         i1 = i1 - 1
  21.         Resume Exit_Chk
  22.     Else
  23.         MsgBox Err.Description
  24.     End If
  25.  
  26. End Function
  27.  
  28.  

Ahora una cuestión que surge es: ¿qúe ocurre con los puertos USB?

Tal vez al final la mejor solución pueda estar recuperando valores del registro de windows. Échale un vistazo a esta clave (w98):
HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/Class/Modem
Contendrá una subclave para cada uno de los módems instalados. Uno de sus valores será "AtachedTo" que te indicará el puerto.

Espero que esto pueda ayudar. Abur.

scorpion25acv

  • Miembro activo
  • **
  • Mensajes: 30
    • Ver Perfil
Re: Detectar Dispositivos
« Respuesta #5 en: Lunes 8 de Noviembre de 2004, 06:41 »
0
Hola, Brroz y gracias nuevamente por ayudarme.

Voy a probar la funcion para informarte luego de los resultados, en el caso de recurrir a ubicarlo en el registro de windows, ya lo estaba intentando pero, la cuestion es que las funciones que tengo para buscar son sobre  una clave especifica, crearla, modificarla o borrarla, y por otra parte tenes razon, la clave se encuentra simpre en win9x, pero, (aqui vienen los peros.. jeje) ese es el mero problemita que tengo tiene que funcionar para : win 9x/2000/xp, y en estos casos la cosa varia, pero si sabes de alguien expert manipulando el registry desde visual me avisas, alguien que sepa hacer busquedas en el mismo por que asi talves si funka, si quieres me das tu correo y te escribo una nota detallada del sistema q estoy creando, para no sacrificar tanto a los lectores de este foro con mis cosillas aburridas   :scream:  jeje! (creo yo q lo son ;) ) y talves luego le cuentes a alguien... Salu2

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: Detectar Dispositivos
« Respuesta #6 en: Miércoles 10 de Noviembre de 2004, 20:01 »
0
Hola.

Sobre lo que comentas de manipular el registro es algo que hago mediante funciones del api. Si necesitas info tal vez te pueda ayudar...

En lo que respecta a sacrificar a los lectores... precisamente la gracia de estos foros es que cualquiera con un problema similar pueda seguir el desarrollo del tema hasta el final y así sacar su propio provecho, y que las aportaciones vengan desde cualquiera de los forer@s.

Por otro lado tampoco me quiero comprometer en exceso con problemas particulares, ya que luego tal vez no pueda (o no me apetezca, o no sepa) dar el soporte al asunto que me gustaría que a mi me dieran... de todas formas mi intención es ayudar (dentro de unos límites, claro, porque al fin y al cabo yo no vivo de esto).

Suerte, chao.

scorpion25acv

  • Miembro activo
  • **
  • Mensajes: 30
    • Ver Perfil
Re: Detectar Dispositivos
« Respuesta #7 en: Sábado 13 de Noviembre de 2004, 04:58 »
0
Hola, nuevamente

y si vamos por puntos... jeje ;)

En cuanto a las funciones con API´s, bienvenida sean, ejemplos, etc, etc, xq del asunto  no conosco mucho, ...


por otra parte la deteccion de dispositivos (que a este caso atañen los Modem's) es xq realizo un sistema que ademas de los procesos "comunes" que realiza (calculos, mantenimientos, seguridad, etc) tambien realiza un proceso de conexion remota por llamarlo asi, donde implementando recordset's desconectados,  trato de enviar informacion a otra maquina, usado desde luego las lineas telefonicas, y el MSComm, de momento se utilizará en 12 maquinas aproximadamente, pero no se que tanto pueda crecer esta cantidad, ni los sistemas operativos venideros  para las mismas , por eso nace la importancia de detectar el puerto donde se ubica el modem , para poder realizar la conexion, reitero los usuarios no intervienen en la eleccion del puerto, como dice el prof del curso "les cuesta la tabla del 0", y esta accion de asignar el puerto en la propiedad CommPort debo acerla internamente.

Me interesa conocer mas de la herramienta, tambien, ya que el sistema lo estoy realizando para poder graduarme (con grado de diplomado, es mi proyecto de graduacion), y como todos o como se da casi siempre corro contra factores Tiempo.

detalles adicionales: Base datos Access,
[guardada con contraseña, accesada por ODBC, con semi-procedimientos almacenados (como yo los llamo), con macros ] crystal report 8, para generacion de reportes (no los he terminado aún), algunos Skins (vbSkinner free, activeSkin 4)...

Salu2 a todos los forer@s, agradeciendo de antemano y quedo esperando respuestas   :hola: