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 08-02-2008
javier20 javier20 is offline
No confirmado
 
Registrado: oct 2006
Posts: 18
Poder: 0
javier20 Va por buen camino
funcion para listar procesos, como

hola q tal navegando por la web encontre este codigo y me pregunto como funciona, hace tiempo que vengo con el delphi y la verdad me gustaria empezar a cazar algo:


bueno el codigo es este:


Código Delphi [-]
function GetProc():String;
var
  Proceso : TProcessEntry32;
  ProcessHandle : THandle;
  HayOtroProceso   : Boolean;
begin
  Proceso.dwSize := SizeOf(TProcessEntry32);
  ProcessHandle := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if Process32First(ProcessHandle, Proceso) then  //Si encuentra el primer proceso
  begin
    Result:= String(Proceso.szExeFile) + '|'+ IntToStr(Proceso.th32ProcessID)+'|';
    repeat HayOtroProceso := Process32Next(ProcessHandle, Proceso);
      if HayOtroProceso then
        Result:=Result + String(Proceso.szExeFile) + '|'+ IntToStr(Proceso.th32ProcessID)+'|';
    until not HayOtroProceso; //Y esto se repite hasta que Process32Next retorne False
  end;
  CloseHandle(ProcessHandle);
end;

estas son mis dudas:

1 ProcessHandle esta definida como THandle y en otros casos he visto que la definen como LongWord, cual es la diferencia?.

2 Proceso.dwSize := SizeOf(TProcessEntry32); para que sirve esto?

3 que pasa si borro la linea CloseHandle al final del codigo.

bueno por el momento son estas nomas espero sus respuestas.

saludos.
Responder Con Cita
  #2  
Antiguo 08-02-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cita:
Empezado por javier20 Ver Mensaje
1 ProcessHandle esta definida como THandle y en otros casos he visto que la definen como LongWord, cual es la diferencia?.
Actualmente (Win32) la diferencia de implementación no es ninguna, dado que ambos tipos de dato ocupan exactamente la misma cantidad de memoria y son prácticamente intercambiables. De hecho, en Delphi 2007, en la línea 429 de la unidad system.pas, encontrás esto:
Código Delphi [-]
type
...
  THandle = LongWord;

En futuras versiones de Delphi, esto podría cambiar, por ejemplo en el 2009, cuándo tengamos a nuestra disposición el commodor: Delphi Win64.

Como ves, la diferencia es semántica. Probablemente en Win64 el THandle ya no sea igual a un LongWord. Por ello, lo recomendable es, si la variable va a contener un Handle, que sea del tipo THandle, así solo recompilas y listo.

Cita:
Empezado por javier20 Ver Mensaje
2 Proceso.dwSize := SizeOf(TProcessEntry32); para que sirve esto?
SizeOf es una función que devuelve el tamaño en bytes de una variable. En este caso, está almacenando dicho tamaño en la estructura que enviará como parámetro al API de windows, que en muchas ocasiones te pide el tamaño del buffer de datos.

Cita:
Empezado por javier20 Ver Mensaje
3 que pasa si borro la linea CloseHandle al final del codigo.
Pérdida de recursos. Un handle abierto permanecerá abierto y consumiendo recursos del sistema. Si tu aplicación no cierra el handle y hace esto, por ejemplo, una vez cada minuto, al cabo de 8 horas tendrás 480 handles abiertos, y creeme, el consumo de memoria será inmenso.

De hecho, en el código que publicas no se tiene garantía de que el handle se libere si ocurre un error mientras se procesa. Debiera incluir una clausula try/finally, deseable siempre que se consumen/liberan recursos.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
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
Cómo hacer para que muchos checkbox usen la misma función? Shikanda Varios 7 12-09-2007 18:27:48
Obtener la ruta de un ejecutable que esta en la lista de procesos para terminarlo JuanErasmo API de Windows 3 27-06-2007 18:24:50
Como Utilizar La Funcion Desc Para Hacerla Parte De Un Query JOTAAB Oracle 2 06-01-2006 19:41:25
Consejo para Acelerar Procesos manuelpr Varios 2 08-03-2005 10:02:22
Algun componente para solo listar el valor de un campo? nefy OOP 15 22-11-2004 15:01:36


La franja horaria es GMT +2. Ahora son las 03:00:51.


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