Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Acceder a la lista de procesos (https://www.clubdelphi.com/foros/showthread.php?t=37546)

IZO 16-11-2006 00:43:34

Acceder a la lista de procesos
 
Hola, bueno soy nuevo en el foro y este es mi primer post, queria hacer una consulta he visto ciertos programas compilados en delphi que captan el funcionamiento (proceso) proceso de otro programa, quiera saber como puedo acceder a la lista de procesos que se estan llevando a cabo, y como puedo seguirlo desde mi programa(Form), gracias.

aeff 16-11-2006 05:20:53

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...

IZO 17-11-2006 02:02:21

Muchas gracias aeff me funciono muy bien, pero queria saber si no ahy forma de seguirlos,(alterarlos) u ocultarlos?.

aeff 17-11-2006 02:18:58

estoy en la misma situación
 
yo agradecería enormemente que cuando logres hacer lo que pides en relación a los procesos, que me lo informes, yo también estoy por dar con ese truco...

seoane 17-11-2006 02:25:34

:confused: Yo cuando alguien pregunta como se puede ocultar un proceso de la lista de procesos me hago siempre la misma pregunta: ¿por que?, y solo se me ocurre una respuesta, y no es nada bueno. Puedo entender que se quiera ocultar de la lista de aplicaciones, pero entenderéis que por motivos de seguridad no se pueda quitar de la de procesos.

;) Demostrarme que me equivoco y darme una razón legitima para ocultar un proceso.

IZO 17-11-2006 16:46:12

Jeje todos quieren los mismo
 
Parece a mis 14 años me interese por la programacion soy muy new y hay algunas o muchas cosas de lemguaje pascal que no entiendo, pues estoy en el colegio y no tengo casi tiempo de leer los tutoriales que me descargo de internet, que dicho sea de paso entiendo el solo el 3% del tutorial que leo(no soy yo es el tutorial que no se explica bien),aprendi lo q se deberia saber lo basico de lo basico como declarar y crear hilos, etc,pero de hay hay tutos muy avanzados q no entiendo ( incluso no entiendo por que se pone^ y @en algunas cosantantes o variables) y busco un tutorial que compense el vacio (entre lo novato y lo experto), les contare que me interese por delhpi al ver un genial programa que captaba procesos y obtenia adress mediante escaneos y al cambiar los values de las adress alteraba su proceso y estaba compilado en delphi, por eso pedi una ayudita con la lista de procesos y a ocultarlos, para ir haciendome una idea de lo que en el fututo(quiza muy lejano) quiera crear un programa como el que les explique.

seoane 17-11-2006 16:57:12

:D Pues a mi también me gustaría ver como hacia el programa para ocultar procesos. Hasta donde yo se, no hay ninguna forma de ocultar un proceso en WindowsXP, no así en windows95 que es algo trivial. La única forma sería, modificando el comportamiento del propio sistema operativo como lo haría un rootkit, pero delphi no es capaz de generar ese tipo de ejecutables.

De todas formas no te desanimes y empieza por aprender a andar antes de intentar correr ;)

yarielrs 25-04-2007 18:48:51

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....

seoane 25-04-2007 19:09:14

Yaeris, eso ocurre porque no tienes suficientes privilegios. Pero lo bueno de ser administrador es que tu mismo te los puedes conceder :D . 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);

yarielrs 25-04-2007 20:31:44

Muchas gracias seoane por tu ayuda pues ahora la funcion si que me funciona a las mil maravillas.......


La franja horaria es GMT +2. Ahora son las 04:33:17.

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