| Код | Function tform1.GetFilePath(PID: Cardinal): String; var hproc : THandle; Buffer : Array[0..MAX_PATH] of Char; S : DWORD; IsWow64Result: BOOL; const PROCESS_QUERY_LIMITED_INFORMATION = $00001000; //Vista and above AccessRights: array[Boolean] of DWORD = (PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, PROCESS_QUERY_LIMITED_INFORMATION); begin if PID > 0 then begin hproc := OpenProcess(AccessRights[IsWinVistaorAbove], False, PID); if IsWin2K then begin S := GetProcessImageFileNameW(hproc, buffer, Length(buffer)); if S>0 then begin Result := DevicePathToWin32Path(Copy(buffer, 1, S)); end end else begin if(Assigned(QueryFullProcessImageNameW) and (QueryFullProcessImageNameW(hproc, 0, Buffer, @S) > 0)) then begin if S>0 then Result := Copy(buffer, 1, S); end; end; CloseHandle(hproc); end; end;
|
Что у меня не так написано?
Да и продолжение корявого кода))) Не буду врать, знакомый поделился сеим кусочком.
| Код | function DevicePathToWin32Path(path:string):string; var c:char; s:string; i:integer; _path : String; begin _path := path; i:=posex('\', path, 2); i:=posex('\', path, i+1); result:=copy(path, i, length(path)); delete(path, i, length(path)); for c:='A' to 'Z' do begin setlength(s, 1000); if querydosdevice(pchar(string(c)+':'), pchar(s), 1000)<>0 then begin s:=pchar(s); if sametext(path, s) then begin result:=c+':'+result; exit; end; end; end; result := _path; end;
|
|