0 5 mins 1 semana

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();
  }

  }
}

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *