PDA

Ver la Versión Completa : Detectar aplicaciones en ejecución


dec
29-06-2006, 23:37:48
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.


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?