Cerrar otra aplicacion desde la tuya  

Enviado Por: Q3 Team
Web : http://www.q3.nu
Email: dlib@q3.nu
Fecha: 10/12/99

Truco accedido 109 veces

 


Es fácil: envianadole 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;



Para cerrar cualquier otra aplicacion, deberias saber o bien su ClassName o bien el titulo de la ventana.

Este invento te dirá ambos de todas las aplicaciones que tengas rulando:

  • Crea una form y pon un TMemo (Memo1) y un TButton (Button1) en ella.
  • En el private de la declaracion de la form pon:


       private
         { Private declarations }
         WindowList1 : TList;
    




  • Y en el OnCLick del Button1 pon este código:


     procedure TForm1.Button2Click(Sender: TObject);
     var
      TopWindow   : HWND;
      WinName,
      WinClass    : array[0..80] of Char;
      x           : Integer;
      NoError     : Boolean;
      function GetAllWindows(Handle: HWND;
               NotUsed: Pointer): Boolean; stdcall;
      begin
        Result := True;
        Form1.WindowList1.Add(Pointer(Handle));
      end;
     begin
       TopWindow   := Handle;
       WindowList1 := TList.Create;
                 try
                   NoError := EnumWindows(@GetAllWindows,
                                          Longint(@TopWindow));
    
                   if not NoError then
                     Exit;
    
                   for x := 0 to WindowList1.Count - 1 do
                   begin
    
                     GetWindowText(HWND(WindowList1[x]),
                                   WinName,
                                   SizeOf(WinName) - 1);
    
                     GetClassName(HWND(WindowList1[x]),
                                  WinClass,
                                  SizeOf(WinName) - 1);
    
                     memo1.Lines.add('Titulo:'+Winname+'-Clase:'+WinClass);
                   end;
                 finally
                   WindowList1.Free;
                 end;
     end;
    



    Y tendras una lista de las tareas ejecutandose, con su titulo y nombre de clase.