Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #2  
Antiguo 21-06-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
force1758,

Cita:
Empezado por force1758
...¿como saber la ubicación exacta de otro proceso, que no sea el mio?...
Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, TlHelp32, PsAPI;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// Obtiene el ID de Proceso (PID) de un Programa Activo en Memoria.
function GetPID(AppName: String): DWORD;
var
   Snapshot: THandle;
   ProcessEntry : TProcessEntry32;
begin
   Result := 0;
   AppName := UpperCase(AppName);
   Snapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0 );
   If Snapshot <> 0 Then
   try
      ProcessEntry.dwSize := Sizeof(ProcessEntry);
      if Process32First(Snapshot, ProcessEntry) then
      repeat
         if Pos(AppName, UpperCase(ExtractFilename(StrPas(ProcessEntry.szExeFile)))) > 0 then
         begin
            Result:= ProcessEntry.th32ProcessID;
            Break;
         end;
      until not Process32Next(Snapshot, ProcessEntry);
   finally
      CloseHandle(Snapshot);
   end;
end;

// Obtiene el Path de un ID de Proceso (PID) Activo en Memoria.
function GetPathFromPID(const PID: cardinal): string;
var
   hProcess: THandle;
   Path: Array[0..MAX_PATH - 1] of char;
begin
   hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, PID);
   if hProcess <> 0 then
   try
      if GetModuleFileNameEx(hProcess, 0, Path, SizeOf(Path)) <> 0 then
         Result := Path;
   finally
      CloseHandle(hProcess)
   end
   else
      raise Exception.Create('El Programa No Se Encuentra Activo en Memoria');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
   PID : THandle;
begin
   PID := GetPID('Notepad.exe');
   ShowMessage(Format('El Path del Programa en Disco es: %s',[GetPathFromPID(PID)]));
end;

end.
El código anterior muestra el Path de cualquier Programa Activo en Memoria (Inclusive el que ejecuta la aplicación), en el ejemplo se muestra la ruta de directorio de Notepad si este es un proceso activo, en caso contrario se emite un mensaje de error.

Espero sea útil

Nelson.

Última edición por Casimiro Notevi fecha: 21-06-2013 a las 09:33:36.
Responder Con Cita
 



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
Detectar proceso en ejecucion C++ dmartinezn C++ Builder 6 28-08-2012 22:07:16
Controlar la ejecución de un proceso satelier.martin Varios 3 14-04-2011 01:35:33
Como Terminar La Ejecucion De Un Proceso kurono Varios 2 01-02-2008 17:10:44
Parar ejecucion de un proceso trohan Varios 3 01-02-2008 17:05:18
¿Cómo saber la ubicación del ejecutable que levantó un proceso? Alcolea Windows 1 24-11-2007 22:58:43


La franja horaria es GMT +2. Ahora son las 16:45:36.


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