Ver Mensaje Individual
  #8  
Antiguo 13-05-2016
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.242
Reputación: 22
ElKurgan Va camino a la fama
Me vuelvo a repetir:

Cita:
Empezado por ElKurgan Ver Mensaje
En stack overflow se ha tratado este tema. Parece que tiene que ver con que el ordendor ejecute procesos de 32 o de 64 bits.

No se si este será tu caso, pero por probar...

Saludos
Si, hay que modificar un poco el código que viene ahí, pero a mi me funciona:

Código Delphi [-]
function TForm1.GetPathFromPid64(const ThePID: Cardinal): string;
type
  TQueryFullProcessImageName = function(hProcess: Thandle; dwFlags: DWORD; lpExeName: PChar; nSize: PDWORD): BOOL; stdcall;
var
  hProcess: Thandle;
  sciezka: array [0 .. MAX_PATH - 1] of Char;
  QueryFullProcessImageName: TQueryFullProcessImageName;
  nSize: cardinal;
begin
  Result := '';
  hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, ThePID);
  if hProcess <> 0 then
    try
      if GetModuleFileNameEX(hProcess, 0, sciezka, MAX_PATH) <> 0 then Result := sciezka
      else if Win32MajorVersion >= 6 then
      begin
        nSize := MAX_PATH;
        ZeroMemory(@sciezka, MAX_PATH);
        @QueryFullProcessImageName := GetProcAddress(GetModuleHandle('kernel32'), 'QueryFullProcessImageNameW');
        if Assigned(QueryFullProcessImageName) then
          if QueryFullProcessImageName(hProcess, 0, sciezka, @nSize) then Result := sciezka
      end;
    finally
      CloseHandle(hProcess);
    end;
end;

Saludos
Responder Con Cita