Delphi - Listado de... en Delphi

 
Vista:

Listado de... en Delphi

Publicado por datax (2 intervenciones) el 22/04/2006 04:29:45
Hola amigos, les comento lo que estoy tratando de hacer, y luego uds. me diran que es lo que se

puede y que es lo que no:
Desde mi Ap, obtengo los programas ejecutados con el siguiente codigo:

// EXTRAE UN LISTADO DE LOS PROGRAMAS EJECUTADOS //

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 );

Usando dicho codigo en el evento OnClik de un boton funciona barbaro, ahora lo que yo quisiera

hacer cosa que probe y no me funciono, es hacerlo cada determinado tiempo (ej. cada 60seg).

Probe poniendo el codigo dentro del evento Timer de un timer y me pasa que solo lee el primer

exe. Es decir al cabo de 2 minuto (haciendo un listado cada 60seg), el archivo en donde guardo la

lista de los programas ejecutados, solo contiene el nombre del primer programa y en varias filas.

El tiempo para ke capture la lista de ejecutados lo determine agregando al codigo, lo siguiente

// EXTRAE UN LISTADO DE LOS PROGRAMAS EJECUTADOS //

function SacaExe(MangoW:HWND):string;
{Obtiene el EXE de una tarea}
{get EXE of a task}
var
Datos :TProcessEntry32;
hID : DWord;
Snap : Integer;
begin
IF CONT = 60 THEN
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;
end;

function ObtieneVentanas(Mango: HWND;
Nada: Pointer): Boolean; stdcall;
var
sTemp:string;
begin
IF CONT = 60 THEN
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;
end;

begin
IF CONT = 60 THEN
BEGIN
EnumWindows( @ObtieneVentanas, 0 );
END;

La linea IF CONT = 60 THEN Y LOS BEGIN + ENDS correspondientes. Vale aclarar, que la variable

CONT la sumo CONT := CONT + 1 por c/seg... se entiende no ¿?... a ver si alguien me puede dar una

mano amigos por favor (les recuerdo, esto es DELPHI).

Desde ya muchas gracias.-
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder