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