Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Principal > API de Windows
Register FAQ Members List Calendar Guía de estilo Today's Posts

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 24/08/2006
mole mole is offline
Registrado
 
Join Date: Aug 2006
Posts: 3
Poder: 0
mole Va por buen camino
Arrow 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
Reply With Quote
  #2  
Old 24/08/2006
seoane's Avatar
[seoane] seoane is offline
Miembro Premium
 
Join Date: Feb 2004
Location: A Coruña, España
Posts: 3,717
Poder: 26
seoane Va por buen camino
Una primera solución seria la siguiente:

Código Delphi [-]
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.
Reply With Quote
  #3  
Old 25/08/2006
mole mole is offline
Registrado
 
Join Date: Aug 2006
Posts: 3
Poder: 0
mole Va por buen camino
thank

Gracias, ya accedo al valor.
Reply With Quote
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Ejecutar BDE Administrador Colgueit Conexión con bases de datos 4 08/05/2006 18:38
como ocultar un proceso del administrador de tareas ivoloco API de Windows 1 14/01/2006 04:21
Activar Administrador de Tareas CARSOFT_AR Varios 4 23/11/2005 20:12
Administrador de memoria comic Varios 1 14/11/2003 16:26
Administrador Interbase 6.1 TIKIMORE Firebird e Interbase 1 19/06/2003 22:05


All times are GMT +2. The time now is 10:20.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi