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
Antwort Antwort
Seite 1 von 3  1 23      
ringli

Registriert seit: 7. Okt 2004
508 Beiträge
 
Delphi 11 Alexandria
 
#1

Unit zur Verwendung von SHGetKnownFolderPath

  Alt 11. Jun 2009, 15:00
Wie einige sicher wissen hat sich in Vista (und höher) die Ermittlung von Systemordnern geändert. Ab Vista sollte zur Ermittlung von Systemordnern nur noch die Funktion SHGetKnownFolderPath verwendet werden. Die bisher verwendete Funktion SHGetFolderPath und die CSIDL-Konstanten sind nur noch aus Kompatibilitätsgründen vorhanden. Da ich bisher keine komplette Delphi-Implementation gefunden habe, habe ich die angehängte Unit erstellt. Vielleicht kann der ein oder andere sie gebrauchen.

Die Verwendung der Unit ist einfach:
Delphi-Quellcode:
uses
   ...uGetKnownFolderPath;

.
.
.
procedure TForm1.Button1Click(Sender: TObject);
var
  ws : WideString;
begin
  ws := GetKnownFolderPath(FOLDERID_Windows);
  ShowMessage(ws);
end;
Dieser Aufruf gibt bspw. C:\Windows zurück. Die Bedeutung der einzelnen FOLDERID's kann im MSDN nachgelesen werden.
Angehängte Dateien
Dateityp: pas ugetknownfolderpath_143.pas (9,5 KB, 305x aufgerufen)
  Mit Zitat antworten Zitat
11. Jun 2009, 19:42
Dieses Thema wurde von "Matze" von "Windows API / MS.NET Framework API" nach "Neuen Beitrag zur Code-Library hinzufügen" verschoben.
Das ist was für die Code-Library.
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Unit zur Verwendung von SHGetKnownFolderPath

  Alt 13. Jul 2016, 15:13
@ringli
Vielen dank, daß Du Dir die Mühe gemacht hast, jetzt kann ich doch noch ein wenig bei D7 bleiben.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
ringli

Registriert seit: 7. Okt 2004
508 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Unit zur Verwendung von SHGetKnownFolderPath

  Alt 26. Sep 2016, 18:56
Habe die Unit mal aktualisiert so das jetzt auch die neueren Folder-ID's enthalten sind.
Angehängte Dateien
Dateityp: pas uGetKnownFolderPath.pas (12,7 KB, 101x aufgerufen)

Geändert von ringli (27. Sep 2016 um 13:34 Uhr)
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Unit zur Verwendung von SHGetKnownFolderPath

  Alt 27. Sep 2016, 11:57
Hallo Ringli

Danke für die Unit,

aber eine Anmerkung: Dein Code gibt den Speicher nicht frei.


Ich habe es so geändert:

Delphi-Quellcode:
function GetKnownFolderPath(const rfid: TGUID): string;
var
  OutPath : PWideChar;
begin
  if ShGetKnownFolderPath(rfid, 0, 0, OutPath) {>= 0} = S_OK then
    begin
      Result := OutPath;
// From MSN
// ppszPath [out]
// Type: PWSTR*
// When this method returns, contains the address of a pointer to a null-terminated Unicode string that specifies the path of the known folder
// The calling process is responsible for freeing this resource once it is no longer needed by calling CoTaskMemFree.
// The returned path does not include a trailing backslash. For example, "C:\Users" is returned rather than "C:\Users\".
      CoTaskMemFree(OutPath);
    end
  else
    begin
      Result := '';
    end;
end;
Benötigt auch noch die WinApi.ActiveX im uses.
Fritz Westermann

Geändert von Fritzew (27. Sep 2016 um 12:38 Uhr)
  Mit Zitat antworten Zitat
ringli

Registriert seit: 7. Okt 2004
508 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Unit zur Verwendung von SHGetKnownFolderPath

  Alt 27. Sep 2016, 12:43
Danke für den Hinweis. Habe den Anhang entsprechend aktualisiert.
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Unit zur Verwendung von SHGetKnownFolderPath

  Alt 27. Sep 2016, 12:47
Du musst aber die Funktion noch auf Rückgabe String ändern.......
Dein Result zeigt auf den freigegebenen Speicher

function GetKnownFolderPath(const rfid: TGUID) : string; // Hier
Fritz Westermann
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Unit zur Verwendung von SHGetKnownFolderPath

  Alt 17. Sep 2018, 12:05
In einem anderen Forum sagte jemand, man solle in diesem Zusammenhang eher Winapi.Ole2.CoTaskMemFree statt Winapi.ActiveX.CoTaskMemFree verwenden.

Was haltet ihr davon?
Geändert von PeterPanino, damit der Platz auf dem Bildschirm nicht so leer aussieht.

Geändert von PeterPanino (17. Sep 2018 um 12:12 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

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

AW: Unit zur Verwendung von SHGetKnownFolderPath

  Alt 17. Sep 2018, 12:26
In einem anderen Forum sagte jemand, man solle in diesem Zusammenhang eher Winapi.Ole2.CoTaskMemFree statt Winapi.ActiveX.CoTaskMemFree verwenden.

Was haltet ihr davon?
Gar nichts, aber wenn man Dateigröße sparen mag und nur das CoTaskMemFree benötigt ohne Zusatz Units einzubinden die die .exe aufblähen, nutze ich die Api direkt procedure CoTaskMemFree(pv: Pointer); stdcall; external 'ole32.dll';
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Unit zur Verwendung von SHGetKnownFolderPath

  Alt 17. Sep 2018, 12:40
Das sind wir von dir ja gewohnt.

Sparen ist zwar allgemein ein gutes Argument (der Weltspartag findet alljährlich in der letzten Oktoberwoche statt), das aber nicht die Frage selbst beantwortet, obwohl diese von dir ausdrücklich zitiert wurde.

Bitte gehe nächstes Mal auf die Fragen bzw. auf die Kommentare der Benutzer ein.
Geändert von PeterPanino, damit der Platz auf dem Bildschirm nicht so leer aussieht.

Geändert von PeterPanino (17. Sep 2018 um 14:21 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 11:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz