Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-09-2003
anitra_cattivo anitra_cattivo is offline
Miembro
 
Registrado: ago 2003
Ubicación: Peru
Posts: 30
Poder: 0
anitra_cattivo Va por buen camino
Question Matar Proceso

Intento hacer un programa que periodicamente busque un archivo en ejecucion: xx:=FindWindow(nil,'MSN Messenger'); y lo cierre SendMessage(xx,WM_CLOSE,0,0);

En verdad funciona, cierra la ventana, Pero el MSN queda en la barra. Lo que quisiera es que cierre el ejecutable no la ventana.
Matando el proceso.
Responder Con Cita
  #2  
Antiguo 10-09-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Antes de crear un hilo en el foro, es recomendable buscar si alguien no ha hecho la pregunta anteriormente, aquí te paso un ejemplo "Como mato un proceso desde delphi?".


Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 10-09-2003
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
Hola, yo he encontrado esto en trucomanía, a lo mejor te sirve:

1)_____________________________________
SABIENDO EL "TÍTULO"
enviandole un mensaje WM_CLOSE.

Por ejemplo, cerrar la calculadora de Windows:



procedure TForm1.Button1Click(Sender: TObject);
var
Mango:integer;
begin
Mango:=FindWindow(nil,'Calculadora');
if mango=0
then ShowMessage('No encuentro esa aplicacion')
else SendMessage(Mango,WM_CLOSE,0,0);
end;

2)_________________________________________
SABIENDO EL NOMBRE DEL EXE:

Añade TLHelp32 en el uses de tu form


procedure TForm1.Button2Click(Sender: TObject);

function CierraExe (FicheroExe:string):boolean;

function SacaExe(MangoW:HWND):string;
{Obtiene el EXE de una tarea}
{get EXE of a task}
var
Datos :TProcessEntry32;
hID Word;
Snap : Integer;
begin
GetWindowThreadProcessId(MangoW,@hID);
Snap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
try
Datos.dwSize:=SizeOf(Datos);
if(Process32First(Snap,Datos))then
begin
repeat
if Datos.th32ProcessID=hID then
begin
Result:=StrPas(Datos.szExeFile);
Break;
end;
until not(Process32Next(Snap,Datos));
end;
finally
Windows.CloseHandle(Snap);
end;
end;


function ObtieneVentanas(Mango: HWND;
ACerrar: Pointer): Boolean; stdcall;
begin
Result := True;
{Mango es el handle de la tarea encontrada}
{Si es el .EXE buscado, lo cierra}
if SacaExe(Mango)=UpperCase( String(ACerrar^) )then
begin
SendMessage(Mango,WM_Close,0,0);
String(Acerrar^):='CERRADO';
end;
end;


begin
EnumWindows( @ObtieneVentanas, Integer(@FicheroExe) );
Result:=(FicheroExe='CERRADO');
end;

begin
if CierraExe('C:\WINDOWS\NOTEPAD.EXE')
then ShowMessage ('Cerrado/Closed')
else ShowMessage ('No Encontrado/not Found');
end;

Otro método más sencillo:

procedure TForm1.Button1Click(Sender: TObject);

function KillTask(FileName:String):integer;
var
ContinueLoop:BOOL;
FSnapshotHandle:THandle;
FProcessEntry32:TProcessEntry32;
const
PROCESS_TERMINATE=$0001;
begin
FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);
ContinueLoop:=Process32First(FSnapshotHandle,FProcessEntry32);
while integer(ContinueLoop)<>0 do
begin
if
((UpperCase(ExtractFileName(FProcessEntry32.szExeFile))=UpperCase(FileName))
or (UpperCase(FProcessEntry32.szExeFile)=UpperCase(FileName)))
then

Result:=Integer(TerminateProcess(OpenProcess(PROCESS_TERMINATE,BOOL(0),

FProcessEntry32.th32ProcessID),0));
ContinueLoop:=Process32Next(FSnapshotHandle,FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;


begin
KillTask('Notepad.exe');
end;


Espero que te ayude en algo
__________________
:)
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 04:53:41.


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
Copyright 1996-2007 Club Delphi