Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-08-2006
mole mole is offline
Registrado
 
Registrado: ago 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
Responder Con Cita
  #2  
Antiguo 24-08-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
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.
Responder Con Cita
  #3  
Antiguo 25-08-2006
mole mole is offline
Registrado
 
Registrado: ago 2006
Posts: 3
Poder: 0
mole Va por buen camino
thank

Gracias, ya accedo al valor.
Responder Con Cita
Respuesta



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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ejecutar BDE Administrador Colgueit Conexión con bases de datos 4 08-05-2006 18:38:04
como ocultar un proceso del administrador de tareas ivoloco API de Windows 1 14-01-2006 04:21:07
Activar Administrador de Tareas CARSOFT_AR Varios 4 23-11-2005 20:12:58
Administrador de memoria comic Varios 1 14-11-2003 16:26:38
Administrador Interbase 6.1 TIKIMORE Firebird e Interbase 1 19-06-2003 22:05:10


La franja horaria es GMT +2. Ahora son las 00:52:41.


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