Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros temas > Trucos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Los mejores trucos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-06-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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.
Responder Con Cita
  #2  
Antiguo 08-12-2006
Avatar de RolphyReyes
RolphyReyes RolphyReyes is offline
Miembro
 
Registrado: ago 2004
Ubicación: Santo Domingo
Posts: 285
Poder: 20
RolphyReyes Va por buen camino
Este procedimiento funciona para xp sp2?
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 00:08:40.


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