如上

解决方案 »

  1.   

    DWORD GetModuleFileName(    HMODULE hModule, // handle to module to find filename for 
        LPTSTR lpFilename, // pointer to buffer for module path 
        DWORD nSize  // size of buffer, in characters 
       );
      

  2.   

    function GetProcessFileName(processID: DWORD): string;
    var
      fn: array [0..MAX_PATH-1] of char;
      hProcess: THANDLE;  hMod: array [0..1023] of HMODULE;
      cbNeeded,size: DWORD;
      i: DWORD;
      p: PProcessRec;
    begin
      Result := '';
      hProcess:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,FALSE,processID);
      if (hProcess <> 0) {and (hProcess <> $FFFFFFFF)} then
      begin
        if (EnumProcessModules(hProcess,@hMod,sizeof(hMod),@cbNeeded)) then
        begin
          size := cbNeeded div sizeof(HMODULE);
          GetModuleFileNameEx(hProcess,hMod[0],fn,sizeof(fn));
          Result := fn;
          if Pos('\??\', Result) = 1 then
            Delete(Result, 1, 4)
          else if Length(Result) > 3 then
          if (Result[1] = '\') and (Result[2] <> '\') then
          begin
            Result[1] := '%';
            i := Pos('\', Result);
            if i > 0 then
              Insert('%', Result, i);
          end;
          ExpandFilePath(Result);
        end;
      end;
      CloseHandle(hProcess);
    end;