AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Neuen Beitrag zur Code-Library hinzufügen Delphi Unit zur Verwendung von SHGetKnownFolderPath
Thema durchsuchen
Ansicht
Themen-Optionen

Unit zur Verwendung von SHGetKnownFolderPath

Ein Thema von ringli · begonnen am 11. Jun 2009 · letzter Beitrag vom 19. Sep 2018
 
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: Unit zur Verwendung von SHGetKnownFolderPath

  Alt 18. Sep 2018, 17: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
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz