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 20-06-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Question Lista de procesos... pero 64 bits?

Hola foro.
Alguno me dirá "esto ya se trató" y espero que me ponga el link, porque por más que busco acá y en google, no encuentro la respuesta.
Ante todo, aclaro que lo que les voy a mostrar me devuelve todos los procesos que se ejecutan con arquitectura de 32 bits.

Para SO Windows 9x:
Código Delphi [-]
procedure CreateWin9xProcessList(List: TstringList);
var
  hSnapShot: THandle;
  ProcInfo: TProcessEntry32;
begin
  if List = nil then Exit;
  hSnapShot := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if (hSnapShot <> THandle(-1)) then
  begin
    ProcInfo.dwSize := SizeOf(ProcInfo);
    if (Process32First(hSnapshot, ProcInfo)) then
    begin
      List.Add(ProcInfo.szExeFile);
      while (Process32Next(hSnapShot, ProcInfo)) do
        List.Add(ProcInfo.szExeFile);
    end;
    CloseHandle(hSnapShot);
  end;
end;

Para SO Windows NT:
Código Delphi [-]
procedure CreateWinNTProcessList(List: TstringList);
var
  PIDArray: array [0..1023] of DWORD;
  cb: DWORD;
  I: Integer;
  ProcCount: Integer;
  hMod: HMODULE;
  hProcess: THandle;
  ModuleName: array [0..300] of Char;
begin
  if List = nil then Exit;
  EnumProcesses(@PIDArray, SizeOf(PIDArray), cb);
  ProcCount := cb div SizeOf(DWORD);
  for I := 0 to ProcCount - 1 do
  begin
    hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or
      PROCESS_VM_READ,
      False,
      PIDArray[i]);
    if (hProcess <> 0) then
    begin
      EnumProcessModules(hProcess, @hMod, SizeOf(hMod), cb);
      GetModuleFilenameEx(hProcess, hMod, ModuleName, SizeOf(ModuleName));
      List.Add(ModuleName);
      CloseHandle(hProcess);
    end;
  end;
end;

Método global:
Código Delphi [-]
procedure GetProcessList(var List: TstringList);
var
  ovi: TOSVersionInfo;
begin
  if List = nil then Exit;
  ovi.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
  GetVersionEx(ovi);
  case ovi.dwPlatformId of
    VER_PLATFORM_WIN32_WINDOWS: CreateWin9xProcessList(List);
    VER_PLATFORM_WIN32_NT: CreateWinNTProcessList(List);
  end
end;

Bueno, eso lo saqué de Torry creo, ya no me acuerdo. Siempre lo usé, porque siempre trabajé sobre 32 bits.
Ahora estoy necesitando obtener la lista de procesos en, por ejemplo, Windows 7 a 64 bits.
El problema es que llamando al global (GetProcessList) solamente me devuelve los procesos basados en 32 bits, y como que no soy muy bueno para entender las API de Windows
Espero que alguien me pueda ayudar.
Pregunta en concreto -> ¿Cómo obtengo también los procesos en 64 bits?
Saludos.
Responder Con Cita
  #2  
Antiguo 21-06-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Puedes probar los componentes GLibWMI que hay en SourceForge o en mi página web.
Entre los componentes del paquete está el ProcessInfo, que te debería devolver las lista de procesos que hay en ejecución. Lo he probado en W7, aunque no en la versión de 64b, pero la teoría dice que debe funcionar sin problemas.

Si quieres probarlo, para ver si funciona en W7+64b antes de instalar nada, puedes bajar los ejecutables de las demos desde aquí y probarlos. entre las demos hay un GenericTest, donde puedes probar todos los componentes, entre ellos el que te he comentado.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 21-06-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Justamente me acabo de meter al foro para mandarte un MP a vos, Neftali, para preguntarte si tu GLibWMI me podría solucionar las cosas.
¡Qué casualidad!
Ahora bajo los demos y cuando pueda me fijo (solamente mi notebook tiene Win7, y mi vieja la está usando ahora).
Saludos y después te cuento!
Responder Con Cita
  #4  
Antiguo 22-06-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Bueno, probada la GLibWMI en Win7 x86 y x64 y funciona en las 2.
Después lo implemento donde lo necesito.
Saludos!
Responder Con Cita
  #5  
Antiguo 22-06-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por BrunoBsso Ver Mensaje
Bueno, probada la GLibWMI en Win7 x86 y x64 y funciona en las 2.
Se agradece el Feedback...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 05-07-2010
Firewind Firewind is offline
Miembro
 
Registrado: ene 2005
Posts: 12
Poder: 0
Firewind Va por buen camino
Hola.

He probado la libreria con delphi 2010, en mi pc me funciona correctamente, pero cuando intento ejecutar el programa creado en mi portatil (P3 dell) me da error, incluso no me funcionan los .exe descargados de la web.

Alguna idea?

Un saludo.

P.D. - Los 2 tienen el mismo windows xp

Última edición por Firewind fecha: 05-07-2010 a las 18:23:44. Razón: aclaracion de version del SO
Responder Con Cita
  #7  
Antiguo 05-07-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
La libería GLibWMI se basa en los componentes de Windows de "Windows Management instrumentation" (en principio deberían estar en marcha en las últimas versiones de Windows); Si esos componentes no están instalados o no están funcionando, la librería no podrá funcionar tampoco.

No comentas qué error te da en el sistema que falla.

Te recomiendo que leas esta introducción que hay en mi página sobre WMI y pruebes a las llamadas desde línea de comandos. Con eso podremos descartar que sea una cosa u otra.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #8  
Antiguo 05-07-2010
Firewind Firewind is offline
Miembro
 
Registrado: ene 2005
Posts: 12
Poder: 0
Firewind Va por buen camino
Hola.

Me he bajado el fichero : WindowsXP-KB933062-x86-ESN.exe , que contiene el el fichero : WGAPluginInstall.exe , lo he instalado en el portatil, reinicio y sigue sin funcionar.
El error que muestra es : Se ha intentando hacer referencia a un simbolo que no existe.
El la linea de comandos pongo : wmic process y no me muestra nada en el portatil, en el pc si. Pero lo raro es que no me da error de comando desconocido, simplemente me sale de nuevo el promt.
Alguna idea de algo más que pueda instalar?

Un saludo.
Responder Con Cita
  #9  
Antiguo 05-07-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
En esta web tienes información de cómo instalar y reparar WMI en los diferentes sistemas Windows.
Ahí también hacen referencia a "The WMI Diagnosis Utility" de Microsoft (link)

Prueba a ve y dinos cual es el resultado.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #10  
Antiguo 08-07-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
He tenido oportunidad de probar esto en un Windows 7 64 bits y funciona. Lista las aplicaciones de 32 y 64 bits.

Código:
Procedure TFTask.ProcList(Lista: TlistBox);
begin
   Lista.Clear;
   FTask.FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
   FTask.FProcessEntry32.dwSize:=Sizeof(FTask.FProcessEntry32);
   if Process32First(FTask.FSnapshotHandle,FTask.FProcessEntry32) then
   begin
     repeat
          Lista.Items.Add(FTask.FProcessEntry32.szExeFile);
     until integer(Process32Next(FTask.FSnapshotHandle,FTask.FProcessEntry32))=0;
   end;
   CloseHandle(FTask.FSnapshotHandle);
end;
Saludos.
Responder Con Cita
  #11  
Antiguo 08-07-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Perdón, ese código pertenece a una clase y aislado pierde sentido. Pongo el código aislado e independiente. Devuelve el listado en un TStrings con lo que se podrá usar un TMemo, TListBox, o cualquier objeto que tenga un TStringList.

Lo he probado en Windows XP 32 bits y Windows 7 64 bits pero no en Vista.

Se que es equivalente a CreateWin9xProcessList. Quizás el proceso global de listado sólo deba llamar a CreateWin9xProcessList y éste procedimiento debería perder el -Win9x- de su nombre, para evitar confusiones.

Código Delphi [-]
procedure ProcList(Lista: TStrings);
var
   FSnapshotHandle: THandle;
   FProcessEntry32: TProcessEntry32;
begin
   Lista.Clear;
   FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
   FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);
   if FSnapshotHandle <> THandle(-1) then
   begin
     if Process32First(FSnapshotHandle, FProcessEntry32) then
     begin
       repeat
          Lista.Add(FProcessEntry32.szExeFile);
       until not Process32Next(FSnapshotHandle, FProcessEntry32);
     end;
     CloseHandle(FSnapshotHandle);
   end;
end;

Saludos.

Última edición por escafandra fecha: 08-07-2010 a las 21:30:34.
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
Lista de Procesos y Terminal Server. eLYaN API de Windows 1 29-06-2007 23:39:50
Acceder a la lista de procesos IZO API de Windows 9 25-04-2007 20:31:44
Lista de procesos de mi ordenador Reinery C++ Builder 7 16-12-2006 01:15:05
¿Cómo ocultar programa de lista de procesos de xp? israelgs C++ Builder 13 27-04-2006 14:14:37
Ocultar una aplicacion de la lista procesos w2000 marceloalegre Varios 0 02-05-2005 16:26:19


La franja horaria es GMT +2. Ahora son las 21:00:43.


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