Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki
Eliminar/Cerrar un proceso de Windows - Delphi
Lenguaje de programación Borland Delphi


Con esta función se podrá eliminar/cerrar un proceso que esté activo en el Sistema Operativo. Para ello deberemos pasarle el PID del proceso a cerrar (Identificador de proceso). La función devolverá el resultado de la acción (cerrado o no cerrado). Para este truco necesitaremos un Formulario, un TEdit y un Botón. En el TEdit se pondrá el PID del proceso a cerrar:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TTerminateStatus = (tsError, tsClose, tsTerminate);

type
  TForm1 = class(TForm)
    bEliminarProceso: TButton;
    txtIDProceso: TEdit;
    function KillProcess(ProcessID: DWORD; Timeout: Integer = MAXINT): TTerminateStatus;
    procedure bEliminarProcesoClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.KillProcess(ProcessID: DWORD; Timeout: Integer = MAXINT): TTerminateStatus;
var
  ProcessHandle: THandle;

  function EnumWindowsProc(Wnd: HWND; ProcessID: DWORD): Boolean; stdcall;
  var
    PID: DWORD;
  begin
    GetWindowThreadProcessId(Wnd, @PID);
    if ProcessID=PID then
      PostMessage(Wnd,WM_CLOSE,0,0);
    Result:=True;
  end;

begin
  Result:=tsError;
  if ProcessID<>GetCurrentProcessId then
  begin
    ProcessHandle:=OpenProcess(SYNCHRONIZE or PROCESS_TERMINATE, False, ProcessID);
    try
      if ProcessHandle<>0 then
      begin
        if Timeout>=0 then
        begin
          EnumWindows(@EnumWindowsProc,LPARAM(ProcessID));
          if WaitForSingleObject(ProcessHandle,Timeout)=WAIT_OBJECT_0 then
            Result:=tsClose
          else
            if TerminateProcess(ProcessHandle,0) then
              Result:=tsTerminate;
        end
        else
          if TerminateProcess(ProcessHandle,0) then
            Result:=tsTerminate;
      end;
    finally
      CloseHandle(ProcessHandle);
    end;
  end;
end;


procedure TForm1.bEliminarProcesoClick(Sender: TObject);
begin
  if KillProcess(strtoint(txtIDProceso.Text)) = tsError then
    showmessage ('No se ha podido terminar el proceso.')
  else
    showmessage ('El proceso se ha cerrado correctamente.')
end;

end.




Publicado el: 2005-01-06

Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A