Esta es una alternativa casera a los programas profesionales que permiten manejar y visualizar los procesos activos en el sistema operativo Microsoft Windows XP. Nótese que se puede mejorar este sencillo programa añadiéndole más información en el namespace System.Diagnostics y poniendo un timer que permita actualizar los valores de memoria usada y otras informaciones. El programa compilado se encuentra en el directorio _tools de la edición actual. Puede descargarlo aqui
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
namespace Procesos
{
public partial class Form1 : Form
{
/// <summary>
/// Variable global para almacenar los procesos activos del sistema
/// </summary>
Process[] allProcess;
/// <summary>
/// Constructor
/// </summary>
public Form1()
{
InitializeComponent();
}
/// <summary>
/// Método encargado de guardar los procesos en el array y de actualizar el comboBox
/// </summary>
private void GetAllProcess()
{
//--> Obtiene el listado de procesos
allProcess = Process.GetProcesses();
//--> Pone en el comboBox el primer proceso de la lista por defecto
containProcess.Text = allProcess[0].ProcessName;
//--> Comienza a actualizar el ComboBox
containProcess.BeginUpdate();
for (int i = 0; i < allProcess.Length; i++)
{
containProcess.Items.Add(allProcess[i].ProcessName);
}
containProcess.EndUpdate();
//--> Esta línea provoca caer en el evento "SelectedIndexChanged"
containProcess.SelectedIndex = 0;
}
private void containProcess_SelectedIndexChanged(object sender, EventArgs e)
{
//--> Utilizo un try porque hay procesos que no me permiten acceder a ellos
try
{
int index = containProcess.SelectedIndex;
label15.Text = "El Handle nativo asociado al proceso:";
label1.Text = allProcess[index].Handle.ToString();
label16.Text = "El número de Handles abiertos por el proceso:";
label2.Text = allProcess[index].HandleCount.ToString();
label17.Text = "Si el proceso no responde:";
label3.Text = allProcess[index].HasExited.ToString();
label18.Text = "El identificador único para el proceso:";
label4.Text = allProcess[index].Id.ToString();
label19.Text = "Dirección de memoria donde el módulo fue cargado:";
label5.Text = allProcess[index].MainModule.BaseAddress.ToString();
label20.Text = "Dirección completa del módulo:";
label6.Text = allProcess[index].MainModule.FileName.ToString();
label21.Text = "Información de la versión del módulo:";
label7.Text = allProcess[index].MainModule.FileVersionInfo.ToString();
label22.Text = "Handle de la ventana principal del proceso:";
label8.Text = allProcess[index].MainWindowHandle.ToString();
label23.Text = "Título de la ventana principal del proceso:";
label9.Text = allProcess[index].MainWindowTitle.ToString();
label24.Text = "Tamaño del paginado de memoria:";
label10.Text = allProcess[index].PagedMemorySize.ToString();
label25.Text = "Tamaño del paginado de memoria del sistema:";
label11.Text = allProcess[index].PagedSystemMemorySize.ToString();
label26.Text = "Nombre del proceso:";
label12.Text = allProcess[index].ProcessName;
label27.Text = "La hora en que el proceso fue abierto:";
label13.Text = allProcess[index].StartTime.ToString();
label28.Text = "Memoria virtual del proceso:";
label14.Text = allProcess[index].VirtualMemorySize.ToString();
}
//--> En el catch vacío los datos del proceso que no pude acceder
catch
{
MessageBox.Show("En algunos procesos como este tengo problemas para extraer la información", "Información");
label15.Text = "El Handle nativo asociado al proceso:";
label1.Text = "";
label16.Text = "El número de Handles abiertos por el proceso:";
label2.Text = "";
label17.Text = "Si el proceso no responde:";
label3.Text = "";
label18.Text = "El identificador único para el proceso:";
label4.Text = "";
label19.Text = "Dirección de memoria donde el módulo fue cargado:";
label5.Text = "";
label20.Text = "Dirección completa del módulo:";
label6.Text = "";
label21.Text = "Información de la versión del módulo:";
label7.Text = "";
label22.Text = "Handle de la ventana principal del proceso:";
label8.Text = "";
label23.Text = "Título de la ventana principal del proceso:";
label9.Text = "";
label24.Text = "Tamaño del paginado de memoria:";
label10.Text = "";
label25.Text = "Tamaño del paginado de memoria del sistema:";
label11.Text = "";
label26.Text = "Nombre del proceso:";
label12.Text = "";
label27.Text = "La hora en que el proceso fue abierto:";
label13.Text = "";
label28.Text = "Memoria virtual del proceso:";
label14.Text = "";
}
}
//--> En el Load de la ventana llamo al método que se encarga de recoger los procesos activos
private void Form1_Load(object sender, EventArgs e)
{
GetAllProcess();
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Close();
}
private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
{
About about = new About();
about.ShowDialog();
}
}
}
