Autores: Francisco José Menéndez Sampedro y Hector José González García
Fecha: 2 de mayo de 2011
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..
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)
Agregamos el manejador de eventos:
this.buttonProcesador.Click += new System.EventHandler(this.buttonProcesador_Click);
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
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);
}
}
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.