Ver la Versión Completa : Administrador de tareas - recuento de indentificadores
Hola, estoy intentado capturar el recuento de identificadores de un processo que aparece en el taskmanager.
Ver -> columnas -> recuento de identificadores (handler en ingles).
Alguna idea?
Gracias
seoane
24-08-2006, 16:34:56
Una primera solución seria la siguiente:
uses psapi;
// Esta función no esta declarada en delphi 7, en versiones posteriores puede que ya lo este
function GetProcessHandleCount(hProcess: THandle; var pdwHandleCount: DWORD): BOOL;
stdcall; external 'Kernel32.dll' name 'GetProcessHandleCount';
// Esta función almacena en una lista el nombre y el HandleCount de cada proceso
procedure GetHandleCounts(Lista: TStringList);
var
Procesos: array[1..1024] of DWORD;
Needed: DWORD;
i: integer;
Process: THANDLE;
ModName: array[0..MAX_PATH] of char;
HandleCount: DWORD;
begin
Lista.Clear;
if EnumProcesses(@Procesos, sizeof(Procesos), Needed ) then
begin
for i:= 1 to (Needed div sizeof(DWORD)) do
begin
Process := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, FALSE,Procesos[i]);
if (Process<>0) then
begin
if GetModuleFileNameEx(Process, 0, ModName,sizeof(ModName)-1) > 0 then
if GetProcessHandleCount(Process, HandleCount) then
//Lista.Values[ModName]:= IntToStr(HandleCount)
Lista.Add(string(PChar(@ModName)) + '=' + IntToStr(HandleCount));
CloseHandle(Process);
end;
end;
end;
end;
// Un ejemplo de como usar la funcion
var
Lista: TStringList;
begin
Lista:= TStringList.Create;
try
GetHandleCounts(Lista);
ShowMessage(Lista.Text);
finally
Lista.Free;
end;
end;
El único problema, siempre hay un problema :) , es que si se utiliza desde una aplicación normal no se tiene acceso a todos los procesos. Si quieres acceder a todos los procesos tendrás que utilizar esta función dentro de un servicio, o quizá jugar con los permisos pero esto ultimo no lo he probado.
Gracias, ya accedo al valor.:p
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.