Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-03-2005
esocrates esocrates is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina
Posts: 210
Poder: 22
esocrates Va por buen camino
Cerrador de programas.Truco 464 de Trucomanía

Estoy intentando adjuntar a una aplicación una función que permita cerrar todos las ventanas de los programas abiertos en ese momento.
Encontré la explicación y procedimientos en el truco 464 de Trucomanía; pero no funciona.
Al ejecutar los botones no sucede nada.
Les agradecería me ayuden con este código o me sugieran otro modo de hacerlo.
El código del truco 464 es este:
Código Delphi [-]
unit Unit1;
 
interface 
 
uses 
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  TlHelp32, StdCtrls;
 
type 
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
    ProgramasAntes    : TStringList;
    procedure GuardaInstante(const Lista:TStringList);
    procedure MataLosQueSobran(const Antes:TStringList);
  public
    { Public declarations }
  end; 
 
var 
  Form1: TForm1;
 
implementation 
 
{$R *.DFM}
 
procedure TForm1.GuardaInstante(const Lista:TStringList);
 
    function SacaExe(MangoW:HWND):string;
    {Obtiene el EXE de una tarea}
    {get EXE of a task}
    var 
      Datos    :TProcessEntry32;
      hID       : DWord;
      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:=UpperCase(StrPas(Datos.szExeFile));
              Break;
            end; 
          until not(Process32Next(Snap,Datos));
        end; 
      finally
        Windows.CloseHandle(Snap);
      end; 
    end; 
 
 
   function ObtieneVentanas(Mango: HWND;
            Nada: Pointer): Boolean; stdcall;
   var 
      sTemp:string;
   begin 
     Result := True;
     {Mango es el handle de la tarea encontrada}
     {Añadimos el .EXE si no está ya añadido...}
     sTemp:=SacaExe(Mango);
      with TStringList(Nada) do 
        if IndexOf(sTemp) = - 1 then Add(sTemp);
   end; 
 
begin 
  Lista.Clear;
  EnumWindows( @ObtieneVentanas, Integer(Lista) );
end; 
 
procedure TForm1.MataLosQueSobran(const Antes:TStringList);
var 
   i                : integer;
   ProgramasDespues : TStringList;
 
  procedure KillTask(FileName:String);
  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 FProcessEntry32.szExeFile=FileName then 
            TerminateProcess( OpenProcess(PROCESS_TERMINATE,BOOL(0),
                              FProcessEntry32.th32ProcessID),0);
            ContinueLoop:=Process32Next(FSnapshotHandle,FProcessEntry32);
      end; 
      CloseHandle(FSnapshotHandle);
  end; 
 
begin 
  ProgramasDespues:=TStringList.Create;
  try
    GuardaInstante(ProgramasDespues);
    for i:=0 to ProgramasDespues.Count-1 do 
      if Antes.IndexOf( ProgramasDespues[i] ) = -1 then 
        KillTask( ProgramasDespues[i] );
  finally
    ProgramasDespues.Free;
  end; 
end; 
 
procedure TForm1.FormCreate(Sender: TObject);
begin 
  ProgramasAntes:=TStringList.Create;
end; 
 
procedure TForm1.FormDestroy(Sender: TObject);
begin 
  ProgramasAntes.Free;
end; 
 
procedure TForm1.Button1Click(Sender: TObject);
begin 
  GuardaInstante(ProgramasAntes);
end; 
 
 
procedure TForm1.Button2Click(Sender: TObject);
begin 
  MataLosQueSobran(ProgramasAntes);
end; 
 
end.

Utilizo Delphi 6 Enterprise en Windows 98 SE

Un saludo y hasta pronto

Última edición por esocrates fecha: 04-03-2005 a las 16:22:37.
Responder Con Cita
 



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 09:05:24.


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