Obtener una lista de los EXEs en ejecución  

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

Truco accedido 84 veces

 


  • Añade 'TLHelp32' en el uses de tu form
  • Pon una TListBox (ListBox1) y un TButton (Button1) en tu form
  • Pon este código en el OnClick de Button1:



     procedure TForm1.Button1Click(Sender: TObject);
    
         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:=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 Form1.ListBox1.Items do
             if IndexOf(sTemp) = - 1 then Add(sTemp);
        end;
    
     begin
       EnumWindows( @ObtieneVentanas, 0 );
     end;