Instalación y configuración de Computadores y Periféricos
Escuela Técnica de Ingeniería Informática de Gijón
3º Ingeniería Técnica en Informática de Sistemas

Obtener Información del Hardware con WMI

Autores: Francisco José Menéndez Sampedro y Hector José González García

Fecha: 2 de mayo de 2011

Objetivos

El objetivo del trabajo es construir un programa que usando las funciones proporcionadas por WMI, obtenga información del hardware que está instalado en el equipo, cubriendo el procesador, la caché, la RAM, disco, etc.

Para realizar el programa pretendemos usar C# para la plataforma .NET..

Teoría básica

Configuración de partida

Creamos un nuevo proyecto del tipo WindowsForm en Visual Studio eligiendo C# como lenguaje. Agregamos una serie de botones : Procesador, Memoria, ..

Vamos a mostrar información de los siguientes objetos:

Agregamos una función que maneje el evento Click producido sobre los botones, de forma que al hacer click sobre un botón se llame a la función
MuestraInformacion(string clave)

Desarrollo

Manejando los eventos

Agregamos el manejador de eventos:

this.buttonProcesador.Click += new System.EventHandler(this.buttonProcesador_Click);
private void buttonProcesador_Click(object sender, EventArgs e)
{
//Procesador
MuestraInformacion("Win32_Processor");

}

La función MuestraInformacion simplemente hace uso de la clase ManagementObjectSearcher que recupera una colección de objetos de administración basándose en una consulta especificada.

Esta clase es uno de los puntos de entrada más utilizados para recuperar información de administración.

Se puede utilizar, por ejemplo, para enumerar todas las unidades de disco, adaptadores de red, procesos y muchos otros objetos de administración del sistema, o para saber qué conexiones de red están activas, qué servicios están detenidos, etc. Cuando se crean instancias de esta clase, una de las instancias toma como entrada una consulta WMIrepresentada en un objeto ObjectQuery o sus derivados, usaremos la forma "select * from clave", donde clave es cualquier clase Win32 previamente mencionada.

Cuando se invoca el método Get de este objeto, ManagementObjectSearcher ejecuta la consulta dada en el ámbito especificado y devuelve una colección de objetos de administración que coinciden con la consulta en un objeto ManagementObjectCollection. Se puede acceder a cada objeto de la colección y visualizar cada uno de sus campos de la forma nombre-valor.



Veamos el Pseudocódigo:

ArrayObjetos array_obj = DameTodosObjetosDeTipo(T)
Para cada objeto obj en array_obj
Para cada propiedad en obj
Imprime nombre
Imprime valor
finpara
finPara

Programando la función

private void MuestraInformacion(string clave)
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher ("select * from " +clave);
listView1.Items.Clear();
ListViewGroup lstvg;
try
{
foreach (ManagementObject objeto in searcher.Get())
{
try
{
lstvg = listView1.Groups.Add(objeto["Name"].ToString(), objeto["Name"].ToString());
}
catch
{

lstvg = listView1.Groups.Add(objeto["Name"].ToString(), objeto["Name"].ToString());

}
if (objeto.Properties.Count <= 0)
{
MessageBox.Show("La Información No Está Disponible", "No Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}

foreach (PropertyData PropiedadObjeto in objeto.Properties)
{
ListViewItem listViewItem1 = new ListViewItem(lstvg);
listViewItem1.Text = PropiedadObjeto.Name;

if (PropiedadObjeto.Value != null && PropiedadObjeto.Value.ToString() != "")
{
listViewItem1.SubItems.Add(PropiedadObjeto.Value.ToString());
listView1.Items.Add(listViewItem1);
}
else
{
// Informacion nula
}

}
}
}

catch (Exception exp)
{
MessageBox.Show("No se pueden obtener datos \n" + exp.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}


Capturas de Pantalla






Enlaces

Definición de C#
WMI
Lista de clases de WMI para arquitecturas de 32 bits
Hardware Information
Información sobre ManagementObjectSearcher


Conclusiones

Como conclusión final vemos que hemos podido obtener información del Hardware del equipo de forma sencilla. Cabe destacar la información que obtenemos de los procesos, ya que entre esta información, se encuentra el ejecutable que los genera, lo que sirve para la detección y desinfección de virus.

Licencia

Creative Commons License
Este trabajo utiliza una Licencia Creative Commons.