Página 1 de 1

Detectar hardware USB

Publicado: 21 Jun 2010, 21:46
por Jonny
Hola

Estoy intentando detectar el hardware USB que hay conectado al pc, y de paso obtener información del mismo, como Nombre, descripción, fabricante, número de serie...

Llevo todo el día buscando y buscando, y nada... esto tiene más tela de la que pensaba...

Por suerte, ya no hace mucho, he encontrado un código en el foro inglés que no hace exactamente lo que quiero,sino que solo da el nombre y descripción de los dispositivos conectados, pero ¡algo es algo!:

Código: Seleccionar todo

; Author - Valuater

$strComputer = "."

$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\cimv2")
$colDevices = $objWMIService.ExecQuery ("Select * From Win32_USBControllerDevice")

For $objDevice in $colDevices
    $strDeviceName = $objDevice.Dependent
    ;ConsoleWrite("!>" & $strDeviceName & @CRLF)
    $strQuotes = Chr(34)
    $strDeviceName = StringReplace($strDeviceName, $strQuotes, "")
    $arrDeviceNames = StringSplit($strDeviceName, "=")
    $strDeviceName = $arrDeviceNames[2]
    $colUSBDevices = $objWMIService.ExecQuery ("Select * From Win32_PnPEntity Where DeviceID = '" & $strDeviceName & "'")
    For $objUSBDevice in $colUSBDevices
        ConsoleWrite("-->" & $objUSBDevice.Description & @CRLF)
    Next    
Next
http://www.autoitscript.com/forum/index ... ntry696460

Estoy seguro, que no debe ser muy difícil modificar el código para que me dé la info sobre cada dispositivo, pero por más que he buscado la clase "Win32_USBControllerDevice", no he encontrado nada, y menos en el foro de AutoIt en inglés (que no sea este código y otro que lista los discos extraíbles).

A ver si alguien tiene idea de como funciona esta clase...

Salu2!

Re: Detectar hardware USB

Publicado: 22 Jun 2010, 09:36
por Ximorro
Pues como ver el problema no es AutoIT, el progama es PURO WINDOWS, todo a base de objetos del sistema y consultas a la base de datos del sistema...

Porque lo que está usando es el servicio WMI (Windows Management Instrumentation) para consultar parámetros del sistema, Win32_USBControllerDevice más que una clase es una tabla, por eso consulta con Select, que es una instrucción del lenguaje SQL (un lenguaje estándar para consultas en bases de datos). Probablemente no son BD como si fuera mysql, más bien es que Windows ofrece la información de esa manera, aunque los datos no los obtenga realmente de tablas almacenadas en el disco duro.

Te lo comento por si te orienta para que sepas qué está usando eso, pero desgraciadamente no te puedo ayudar mucho porque no he trabajado nunca con WMI y no sé qué tipo de información se puede obtener de sus bases de datos.

Así que para seguir este camino toca buscar en WMI, desgraciadamente la página oficial está en inglés, si paso a español... la sigue poniendo en inglés.
http://msdn.microsoft.com/es-es/library ... 85%29.aspx

Y por supuesto hay que saber SQL para hacer este tipo de consultas, aunque quizás no haya que hacer consultas muy complejas una vez se sepa dónde está la información, si es que está...

Re: Detectar hardware USB

Publicado: 22 Jun 2010, 13:41
por Jonny
Hola

Bueno, sí me has ayudado un poco...

Lo que explicas del WMI es más o menos lo que estuve leyendo ayer, pero claro... justo por lo extenso que es, lo chungo es encontrar justo esto.


Poderse, se puede hacer. con WMI, o con apis... porque este programa:
http://www.sendspace.com/file/0fwxoj
Lo hace, entre otras funciones, como detener el dispositivo hardware seleccionado.

Pero la pregunta es ¿Como?...

En fin, me parece que no queda más remedio que con mucha paciencia rebuscar en la msdn...

Salu2!

Re: Detectar hardware USB

Publicado: 23 Jun 2010, 00:05
por Chefito
Mmmmm.....que dificil lo hacess :smt005 , habiendo apis y el objeto FileSystemObject :smt001 .

Yo es que tampoco he manejado mucho el WMI, pero bueno, si tengo que manejarlo lo manejo :smt024 .
Pero me gusta más utilizar lo que te he dicho al principio.

Mira la api GetVolumenInformation y el objeto FileSystemObject.

Te dejo un post del foro ingles donde explica con códigos estos métodos:
http://www.autoitscript.com/forum/index ... ntry665010

Y antes de que digas cosas como que no funciona el código, o que te da error alguna parte, analizalo primero y piensa por ejemplo que el código que utiliza el objeto FileSystemObject te puede fallar porque intentará coger información de discos que no están preparados (como la unidad de disqueta A: y el dvd).
Para solucionar esto tienes que ver las propiedad IsReady y condicionar las unidades.

Saludos.

Re: Detectar hardware USB

Publicado: 23 Jun 2010, 07:44
por Jonny
Hola

Gracias.

Mi idea era hacerlo con apis, que aunque no me lleve bien con ellas, creo que hubiera acabado antes que con el WMI, pero No he encontrado qué apis ni siquiera qué objetos hacen lo que quería, por más vueltas que he dao en Google.
En el foro inglés, tanto de lo mismo, claro, que al no saber qué objeto ni qué api buscar, pues me centraba en USB, en cosas como:
"usb info devices", "usb connections"...
y cosas así, y todo lo que sale es mayormente para pen-drives, discos extraíbles y poco más.

Sabiendo esto, miraré este post
Tranqui, que prometo por lo menos probar el código. Jeje.

De todas formas, ayer, como me centré en el WMI, porque pensaba que era la solución, y estuve buscando y buscando páginas que hablaran de esto, encontré un programa, que quizá a alguien le sirva más que a mí, que lo usaría solo para ver objetos com y buscar como usarlos con autoit...

Se trata de Ole View que muestra todos los objetos com que hay instalados en el equipo, y además parece que da algo de info sobre los objetos, para trabajar con ellos.

Quizá ya conozcais la herramienta, porque la mencionan en la ayuda de AutoIt, en "Referencia de objetos/com", pero yo la he descargado y arreglado un poco para que no sea tan coñazo instalarla, ya que en la ayuda de AutoIt, dicen que hay que descargar dos versiones del programa para copiar una dll de una de ellas...

Así, que por si a alguien le interesa, aquí teneis el link, con el instalador de la versión más reciente que aparece en la ayuda de AutoIt, la dll que hace falta, un .bat para registrarla y unas breves instrucciones para poner en marcha el programa:

http://www.sendspace.com/file/1014fw.
Lo pongo aquí, porque no es un script de AutoIt (para ponerlo en "Scripts"), y bueno, al hablar en este post del WMI...

Quizá, a alguien que sepa manejar los objetos com le sirva.

Salu2!

Re: Detectar hardware USB

Publicado: 23 Jun 2010, 08:26
por Ximorro
Menos mal que ha llegado Chefito, The Master of the APIs :smt003

OleView puede ser muy útil, y a veces me ha servido, pero otras me he perdido entre tanto objeto, interfaces y librerías, como no sepas qué objeto quieres mirar vas loco... Pero vaya, mejor que nada...

Re: Detectar hardware USB

Publicado: 23 Jun 2010, 14:01
por Jonny
Hola

Yo lo descargué por eso de ver si encontraba algún objeto que me diera alguna pista para lo que necesitaba, pero ... sin saber qué buscaba exactamente, y claro, desistí cuando llevaba cosa de mil y pico objetos mirados, sin saber que estaba leyendo..

Salu2!

Re: Detectar hardware USB

Publicado: 25 Jun 2010, 19:46
por kemazonico
Pues yo ando en algo similar, mi tema es crear un Proyecto de Gestión de Actívos.
Por ejemplo, sobre deteccion de hardware el WMIService ayuda un poco, yo estoy atorado en como detectar marca, modelo y numero de serie de un monitor...
Lo poco que he encontrado es esto http://www.planet-source-code.com/vb/sc ... 8&lngWId=1 pero no tengo ni idea de como adaptarlo a Autoit.

Sigo buscando y si obtengo avances sobre el tema lo comparto por este medio.

Por ejemplo, para detectar modelo y numero de serie de un equipo no es muy complicado:

Código: Seleccionar todo

$strComputer = "."
$objWMIService = ObjGet("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" _
    & $strComputer & "\root\cimv2")
$colSMBIOS = $objWMIService.ExecQuery _
    ("Select * from Win32_SystemEnclosure")
For $objSMBIOS in $colSMBIOS
    ConsoleWrite ("Numero de parte: " & $objSMBIOS.PartNumber & @CRLF)
	ConsoleWrite ("Numero de serie: " _
        & $objSMBIOS.SerialNumber & @CRLF)
	ConsoleWrite ("Placa de identificación: " & $objSMBIOS.SMBIOSAssetTag & @CRLF)
Next
Ahora tambien me surge la duda de como obtener los datos de licencia de un software (Windows y Office principalmente) para de esa manera tambien hacer un inventario de software.


Sobre el manejo de WMI para dispositivos USB encontre esto: http://msdn.microsoft.com/en-us/library ... 85%29.aspx

Checa la herramienta WMI Explorer, seguramente puede ser de ayuda.

Re: Detectar hardware USB

Publicado: 25 Jun 2010, 20:17
por Jonny
Hola
Mira la api GetVolumenInformation y el objeto FileSystemObject.

Te dejo un post del foro ingles donde explica con códigos estos métodos:
http://www.autoitscript.com/forum/index ... ntry665010

Y antes de que digas cosas como que no funciona el código, o que te da error alguna parte, analizalo primero y piensa por ejemplo que el código que utiliza
el objeto FileSystemObject te puede fallar porque intentará coger información de discos que no están preparados (como la unidad de disqueta A: y el dvd).

He mirado el post, todos los mensajes. Y todos los códigos tratan los discos duros.
Yo quería detectar todo el hardware USB, no solo discos, sinó cámara, impresora... cualquier cosa que pudiera haber conectada en los puertos USB.

Salu2!