Registriert seit: 1. Feb 2018
3.691 Beiträge
Delphi 11 Alexandria
|
AW: Unit zur Verwendung von SHGetKnownFolderPath
18. Sep 2018, 18:28
Es hat ja ein wenig damit zu tun (SHGetKnownFolderPath).
Geht das auch irgendwie andersrum? Ich habe z.B. "C:\Programme" und möchte den wirklichen Ordner ermitteln. Also hier dann "C:\Program Files".
Geht das irgendwie?
Gruß
Micha
Ich mache es so:
Delphi-Quellcode:
// kann sein das Dein Delphi die zwei Zeilen schon in Windows.pas hat, dann wegmachen.
const FILE_NAME_NORMALIZED = $0;
Function GetFinalPathNameByHandleA(hFile: THandle; lpszFilePath: LPSTR; cchFilePath: DWORD; dwFlags: DWORD): DWORD; stdcall; external ' Kernel32.dll';
function _FileGetSymLinkTarget( const APathToLink : string; var ATarget : string ) : boolean;
var
LinkHandle: THandle;
TargetName: array [0..OFS_MAXPATHNAME-1] of AnsiChar;
begin
ATarget := ' ';
LinkHandle := CreateFile( PChar(APathToLink), 0, FILE_SHARE_READ, nil,
OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);
Win32Check(LinkHandle <> INVALID_HANDLE_VALUE);
try
Result := GetFinalPathNameByHandleA(LinkHandle, @TargetName, OFS_MAXPATHNAME, FILE_NAME_NORMALIZED) > 0;
if Result then
begin
ATarget := TargetName;
if Pos( ' \\?\UNC\', ATarget ) = 1 then
begin
Delete( ATarget, 1, 8 );
Insert( ' \\', ATarget, 1 );
end
else
if Pos( ' \\?\', ATarget ) = 1 then
Delete( ATarget, 1, 4 );
end;
finally
CloseHandle(LinkHandle);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
s: String;
begin
s := ' ';
_FileGetSymLinkTarget(' c:\programme',s);
ShowMessage(s);
end;
Zitat:
C:\Program Files
Wie oft muss man euch beide eigentlich noch ermahnen!
Ich hoffe mit dem letzten Beitrag wird wieder zum Thema zurückgefunden.
Verzeih mir und ich hoffe mit diesem Beitrag Deinen Wunsch Sinngemäß umgesetzt zu haben
|
|
Zitat
|