Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-11-2006
Avatar de aeff
aeff aeff is offline
Miembro
 
Registrado: oct 2006
Ubicación: Cuba, Guantánamo
Posts: 348
Poder: 20
aeff Va camino a la fama
prueba con esto

si a lo que te refieres es a lo que yo entendí, entonces te diré que puedes obtener los nombres de los procesos de la siguiente manera,

colocas primeramente un Listview con dos columnas, ID y Name del proceso:

implementas esta función para obtener los procesos, y sus dos descripciones anterior:

Código Delphi [-]
 
procedure GetMemoryProcess();
var
 foto: Cardinal;
  datos: tagPROCESSENTRY32;
  r: Integer;
begin
 r := 1;
  datos.dwSize := sizeOF(tagPROCESSENTRY32);
  foto := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  while Process32Next(foto, datos) do
   begin
      Form1.ListView1.Items.Add.Caption := IntToStr(datos.th32ProcessID);
   Form1.ListView1.Items[r -1].SubItems.Add('EXE: '  + datos.szExeFile);
     inc(r);
    end;
 CloseHandle(foto);
end;

ahora, para la parte de obtener los subprocesos o los modulos cargados por un proceso, puedes implementar esta otra función:

Código Delphi [-]
  
procedure GetModulesProcess(idProcess, tData: Integer);
var
 foto: Cardinal;
  datos: tagMODULEENTRY32;
  r: Integer;
begin
 foto := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, idProcess);
 r := 1;
  datos.dwSize := sizeOf(tagMODULEENTRY32);
  while Module32Next(foto, datos) do
   begin
     case tData of
       1: ShowMessage(IntToStr(datos.hModule));
       2: ShowMessage(datos.szModule);
       3: ShowMessage(datos.szExePath);
    end;
      inc(r);
    end;
 CloseHandle(foto);
end;

el primer parámetro de esta última funcion es para obtener los subprocesos del proceso que tenga el ID especificado, por ejemplo el 456, winlogon.exe...

y el segundo parámetro de esta función es para mostrar en un mensajito la descripción del subproceso:
1 => Handle
2 => Nombre
3 => Path + name

espero que te funcione...

Última edición por dec fecha: 16-11-2006 a las 05:47:31.
Responder Con Cita
  #2  
Antiguo 25-04-2007
Avatar de yarielrs
yarielrs yarielrs is offline
Miembro
 
Registrado: mar 2007
Ubicación: Cienfuegos, Cuba
Posts: 16
Poder: 0
yarielrs Va por buen camino
Hola aeff tengo una duda en cuanto a la función GetModulesProcess que pusiste, el problema es que cuando le doy el ID del winlogon.exe o de cualquier otro proceso que se ejecuta como un proceso de sistema no me devuelve ningún resultado esto es en windows xp sp2 y mi cuenta es administrativa, entonces lo que quisiera que me dijeras es porque sucede esto porque a la verdad mira que me e ron pido tratando de averiguarlo pero no e podido dar con la respuesta.

Gracias de antemano y disculpa la molestia....
Responder Con Cita
  #3  
Antiguo 25-04-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Yaeris, eso ocurre porque no tienes suficientes privilegios. Pero lo bueno de ser administrador es que tu mismo te los puedes conceder . La siguiente función permite elevar los privilegios de tu aplicación, de esta forma ya podrás usar la función.

Código Delphi [-]
function EnablePrivilege(PrivilegeName: PChar; Enable: Boolean): Boolean;
var
  hToken: THandle;
  Tp: TOKEN_PRIVILEGES;
  Luid: TLargeInteger;
begin
  Result:= FALSE;
  if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or
    TOKEN_QUERY or TOKEN_READ, hToken) then
    if LookupPrivilegeValue(nil,PrivilegeName,Luid) then
    begin
      Tp.PrivilegeCount:= 1;
      Tp.Privileges[0].Luid:= Luid;
      if Enable then
        Tp.Privileges[0].Attributes:= SE_PRIVILEGE_ENABLED
      else
        Tp.Privileges[0].Attributes:= 0;
      Result:= AdjustTokenPrivileges(hToken,FALSE,Tp,0,nil,PDWORD(nil)^);
      CloseHandle(hToken);
    end;
end;

Por ejemplo:
Código Delphi [-]
EnablePrivilege('SeDebugPrivilege', TRUE);
// Aqui usamos la funcion
GetModulesProcess(524,2);
EnablePrivilege('SeDebugPrivilege', FALSE);
Responder Con Cita
  #4  
Antiguo 25-04-2007
Avatar de yarielrs
yarielrs yarielrs is offline
Miembro
 
Registrado: mar 2007
Ubicación: Cienfuegos, Cuba
Posts: 16
Poder: 0
yarielrs Va por buen camino
Muchas gracias seoane por tu ayuda pues ahora la funcion si que me funciona a las mil maravillas.......
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 ocultar programa de lista de procesos de xp? israelgs C++ Builder 13 27-04-2006 14:14:37
Triggers Y Procesos micayael Firebird e Interbase 6 03-12-2005 16:40:01
¿Mejor heredar de una Lista o mejor introducir la Lista en un campo? Jome OOP 8 24-11-2005 17:11:16
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 02:56:01.


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