Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   Detectar aplicaciones en ejecución (https://www.clubdelphi.com/foros/showthread.php?t=80526)

dec 29-06-2006 23:37:48

Detectar aplicaciones en ejecución
 
Detectar todas las aplicaciones que se estén ejecutando en Windows.

FindWindow te busca ventanas concretas que pueden ser una aplicación o no y lo mismo pasa con EnumWindows, que te busca todas las ventanas TopLevel, pero hay aplicaciones que pueden tener más de una y ciertamente las hay a montones que no tienen ninguna ventana asociada.

Para hacer eso, tienes que echar mano de las ToolHelp. La contrapartida es que esta táctica no te vale para NT.

Bueno, te pongo, un ejemplo de como se hace, hazte la idea que simplemente consta de un TListView con la propiedad ViewStyle puesta a vsReport, así de paso explicamos como un TListView puede servir para mostrar varias columnas.

Código Delphi [-]
var
  hSnapShot: THandle;
  Process: TProcessEntry32;
  lResult: Boolean;
  ListItem: TListItem;
begin
  hSnapShot := CreateToolHelp32SnapShot( TH32CS_SNAPPROCESS, 0 );
  if ( hSnapShot = -1 ) then
    ShowMessage( 'Error: ' + IntToStr( GetLastError ) );
  lResult := Process32First( hSnapShot, Process );
  while lResult do
  begin
    ListItem := ProcessLView.Items.Add;
    with ListItem, Process do
    begin
      Caption := ExtractFileName( szExeFile );
      SubItems.Add( Format( '%-8.8x', [th32ModuleID] ) );
      SubItems.Add( Format( '%-8.8x', [th32ProcessID] ) );
      SubItems.Add( szExeFile );
    end (*with*);
    lResult := Process32Next( hSnapShot, Process );
  end (*while*);
  CloseHandle( hSnapShot );

Donde obviamente ProcessLView es el componente TListView al que hacía referencia.

Su uso es muy simple, como en un entorno donde el propio OS está creando y destruyendo procesos constantemente no tiene mucho sentido de hablar de procesos existentes, lo primero que hacemos es tomar una instántanea (snapshot) del estado de Windows en ese mismo momento, y seguidamente nos limitamos a recorrer la lista enlazada de todos los procesos que había en el momento en que sacamos la instantanea mediante llamadas a Process32First y Process32Next, añadiendo cada proceso al TListView, finalmente cuando hemos acabado, cerramos la "máquina de fotos" y liberamos la memoria.

RolphyReyes 08-12-2006 16:44:23

Este procedimiento funciona para xp sp2?


La franja horaria es GMT +2. Ahora son las 19:25:02.

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