AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Groß/Kleinschreibung (Pfad) Original erhalten?
Thema durchsuchen
Ansicht
Themen-Optionen

Groß/Kleinschreibung (Pfad) Original erhalten?

Ein Thema von MicMic · begonnen am 18. Aug 2018 · letzter Beitrag vom 1. Okt 2018
 
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#10

AW: Groß/Kleinschreibung (Pfad) Original erhalten?

  Alt 19. Aug 2018, 09:06
Danke @KodeZwerg
Geht SUPER. Dankeschön

Habe noch zwei Fragen. Im "if not" Bereich steht "CoTaskMemFree". Sonst nicht.
Sollte es nicht so oder so ausgeführt werden? Aber es ist ja hier ein "Result" was ja gebraucht wird.

Dann kenne ich das "WideString" gar nicht. Bei "PWideChar(WideString(Path))". Ich mach sonst immer ein "PWideChar(Path)". Das geht auch aber was ist der Unterschied? Da ist mir sowieso noch etwas im Gedächtnis. Bin mir da nicht sicher, aber glaube gelesen zu haben das man bei PWideChar(stringvariable) noch ein "#0" dazutun soll. Also PWideChar(stringvariable+#0). Kann das sein?

Ich habe jedenfalls mal folgende Funktion aus den beiden gemacht. OleCheck kenne ich auch nicht und habe es mal Anhand ähnlicher Funktionen die ich nutze abgeändert. Dabei ist folgendes herausgekommen. Hier wird dann "CoTaskMemFree" auch stets freigegeben und im jeden Fehlerfall einfach der übergebene Pfad wieder zurückgegeben. Ein nachfolgender Attribut-Check der beiden "SFGAO_..." Flags habe ich auch weggelassen, da ich denke, dass dies nicht mehr nötig ist, wenn es bei der Funktion "ParseDisplayName" gesetzt wurde. Das ist aber weniger ein technisches Verständnis, eher so eine Überlegung
Code:
Function PathToCS(Const Path: UnicodeString): UnicodeString;
Var
  Count: ULONG;
  Attrs: ULONG;
  ShellFolder: IShellFolder;
  Pa: Array[0..Max_Path] Of Char;
  Pidl: PItemIDList;
Begin
  Attrs := SFGAO_FOLDER or SFGAO_STREAM;
  Count := 0;
  If SHGetDesktopFolder(ShellFolder) = S_OK Then
  Begin
    If ShellFolder.ParseDisplayName(0,Nil,PWideChar(Path),Count,Pidl,Attrs) = S_OK Then
    Begin
      If SHGetPathFromIDList(Pidl, Pa)
        Then Result := IncludeTrailingPathDelimiter(Pa)
        Else Result := IncludeTrailingPathDelimiter(Path);
      CoTaskMemFree(Pidl);
    End Else Result := IncludeTrailingPathDelimiter(Path);
  End Else Result := IncludeTrailingPathDelimiter(Path);
End;
Gruß Michael
  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 22:55 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