Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Finalizar procesos en windows (https://www.clubdelphi.com/foros/showthread.php?t=48150)

jocey 17-09-2007 18:05:11

Finalizar procesos en windows
 
Hola a todos los amigos del club, quisiera un pequeno ejemplo de como puedo finalizar un proceso en windows, para ser mas objetivo quiero cerrar el windows media player desde delphi.


Muchas gracias a todos

duilioisola 17-09-2007 19:28:47

Busca "Matar el proceso de nuestro programa" en la parte de trucos...

Quizas te ayude. Parece que hay una función que mata el proceso según el nombre del archivo ejecutable :

Código Delphi [-]
function TFrmPrincipal.KillTask(FileName:String):integer;

dec 17-09-2007 19:35:10

Hola,

Una posible forma:

Código Delphi [-]
uses
  TlHelp32;

function MatarProcesos(nombre: string): boolean;
var
  moduleEntry: TModuleEntry32;
  processEntry: TProcessEntry32;
  hSnapshot, hProcess: cardinal;
begin
  result := false;
  moduleEntry.dwSize := SizeOf(TModuleEntry32);
  processEntry.dwSize := SizeOf(TProcessEntry32);
  hSnapshot := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS,0);
  if Process32First(hSnapshot,processEntry) then
  begin
    repeat
      if (lstrcmpi(PChar(nombre),@processEntry.szExeFile) = 0) then
      begin
        hProcess := OpenProcess(PROCESS_TERMINATE,
                     false,processEntry.th32ProcessID);
        result := TerminateProcess(hProcess,0);
        CloseHandle(hProcess);
      end;
    until not Process32Next(hSnapshot,processEntry);
  end;
  CloseHandle(hSnapshot);
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
  MatarProcesos('calc.exe');
end;

jocey 17-09-2007 19:58:51

Cita:

Empezado por dec (Mensaje 231673)
Hola,

Una posible forma:

Código Delphi [-]uses TlHelp32; function MatarProcesos(nombre: string): boolean;
var moduleEntry: TModuleEntry32; processEntry: TProcessEntry32; hSnapshot, hProcess: cardinal; begin result := false; moduleEntry.dwSize := SizeOf(TModuleEntry32); processEntry.dwSize := SizeOf(TProcessEntry32); hSnapshot := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS,0); if Process32First(hSnapshot,processEntry) then begin repeat if (lstrcmpi(PChar(nombre),@processEntry.szExeFile) = 0) then begin hProcess := OpenProcess(PROCESS_TERMINATE, false,processEntry.th32ProcessID); result := TerminateProcess(hProcess,0); CloseHandle(hProcess); end;
until not Process32Next(hSnapshot,processEntry);
end;
CloseHandle(hSnapshot);
end;

procedure TForm2.Button1Click(Sender: TObject);
begin MatarProcesos('calc.exe');
end;




Muchas gracias amigo

jocey 17-09-2007 20:00:07

Cita:

Empezado por duilioisola (Mensaje 231671)
Busca "Matar el proceso de nuestro programa" en la parte de trucos...

Quizas te ayude. Parece que hay una función que mata el proceso según el nombre del archivo ejecutable :

Código Delphi [-]function TFrmPrincipal.KillTask(FileName:String):integer;


Muchas Gracias

seoane 17-09-2007 20:00:45

Y no sera un poco excesivo matarlo, no llegaría con cerrarlo :confused:
Código Delphi [-]
  PostMessage(Findwindow('WMPlayerApp',nil),WM_CLOSE,0,0);

dec 17-09-2007 20:22:11

Hola,

Cita:

Empezado por seoane
Y no sera un poco excesivo matarlo, no llegaría con cerrarlo

Nada. A los procesos ni agua. Que luego se replican y te llenan toda la memoria. ¡Hay que acabar con ellos de raíz! :D :D :D

seoane 17-09-2007 20:25:42

Cita:

Empezado por dec (Mensaje 231692)
Nada. A los procesos ni agua. Que luego se replican y te llenan toda la memoria. ¡Hay que acabar con ellos de raíz! :D :D :D

Siendo así, lo mejor es desenchufar el ordenador :D

egostar 17-09-2007 20:27:24

Cita:

Empezado por dec (Mensaje 231692)
Hola,



Nada. A los procesos ni agua. Que luego se replican y te llenan toda la memoria. ¡Hay que acabar con ellos de raíz! :D :D :D

Y si son familiares de M$ mucho mejor...., diria nuestro amigo Casimiro :D:D:D:D

Salud OS

dec 17-09-2007 20:27:50

Hola,

Cita:

Empezado por seoane
Siendo así, lo mejor es desenchufar el ordenador

Es un buen consejo. Llegado el caso, es un buen consejo. :) :D :D

Cañones 10-11-2009 21:57:11

Cita:

Empezado por seoane (Mensaje 231688)
Y no sera un poco excesivo matarlo, no llegaría con cerrarlo :confused:
Código Delphi [-] PostMessage(Findwindow('WMPlayerApp',nil),WM_CLOSE,0,0);

Hola, estoy tratando de cerrar una aplicación con el método que indicas, probé con una ventana X y funciona, ahora necesito hacer esto con una aplicación que esta en modo systray y no funciona, como puedo hacer esto?

Desde ya muchas gracias a todos por su tiempo.

Axel_Tech 11-11-2009 10:31:40

Cañones prueba esto, yo lo hago así:
Código Delphi [-]
ShellExecute(Handle, nil, 'cmd', 'cmd /c taskkill /im nombreProceso.exe', nil, SW_HIDE);
Debes añadir ShellApi a tus uses.

Cañones 11-11-2009 11:31:23

Hola, gracias por tu pronta respuesta. Eso es lo que necesitaba.

Gracias por tu tiempo.

Saludos.
Isidoro

bosster_018 15-11-2009 06:56:51

Tarde pero aclarando algunas dudas
 
¿Y no podríamos usar el "ShellExecute" para matar el proceso con "tskill":

Uses
ShellApi

Código Delphi [-]
//Eliminar el proceso Windows Media Player (wmplayer) con tskill
ShellExecute(Handle, nil, 'tskill', 'wmplayer', nil, sw_hide);


La franja horaria es GMT +2. Ahora son las 19:59:10.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi