![]() |
[Vista] lokalisierter Dateiname => realer Dateinamen
Hallo,
unter Vista gibt es das Verzeichnis 'c:\Programme' nur noch als virtuelles Verzeichnis. Real heiß es 'c:\program files'. Wenn ich ein Verzeichnis oder eine Datei habe, die in einem solchen virtuellen Verzeichnis ist, möchte ich dem Anwender aber den Verzeichnispfad auch entsprechend anbieten: Also, wie mache ich aus: c:\program files\Mein Programm\test.exe c:\programme\Mein Programm\test.exe Gibt es unter Vista eine entsprechende API Funktion? Die Lösung soll natürlich auch mit allen anderen virtuellen Verzeichnissen funktionieren. Danke im voraus für die Hilfe Ingo |
Re: [Vista] lokalisierter Dateiname => realer Dateinamen
Microsoft empfielht
![]() ![]() |
Re: [Vista] lokalisierter Dateiname => realer Dateinamen
In einem der letzten Vista Videos wurde auf diese Problematik auch eingegangen, und gezeigt wie es geht.
|
Re: [Vista] lokalisierter Dateiname => realer Dateinamen
Eine Sache hatte ich allerdings nicht erwähnt: GetLocalizedName() verarbeitet ganze Pfadangaben und lokalisiert in einem Rutsch - die andere Funktion macht das meines Wissens nur ordnerweise. Man muss den Pfad also selber aufsplitten und dann wieder z'ambasteln.
|
Re: [Vista] lokalisierter Dateiname => realer Dateinamen
Vielen Dank für den ersten Überblick.
Bei der Funktion SHGetLocalizedName sehe ich aber noch nicht ganz mit den Deklarationen der einzelnen Parameter durch. pszPath ist ja noch klar = pchar Aber die restlichen sind für mich nur 'böhmische Dörfer'. Kann mir einer auf die Sprünge helfen. Nochmals Danke im voraus. Ingo |
Re: [Vista] lokalisierter Dateiname => realer Dateinamen
Zitat:
Delphi-Quellcode:
...:cat:...
function SHGetLocalizedName(
pszPath: PWideChar; var pszResModule: PWideChar; cch: UINT; var pidsRes: Integer; ): HRESULT; stdcall; |
Re: [Vista] lokalisierter Dateiname => realer Dateinamen
Danke an alle, klappt wunderbar.
Ich habe es mittels ShGetFileInfo() umgesetzt. Gibt es aber auch die Möglichkeit des umgekehrten Weges, also dass man über den lokalen Namen den realen herausbekommt. Ich stehe vor dem Problem dass der Anwender mittels 'Einfügen' einen virtuellen Pfad angeben könnte z. Bsp. c:\programme\Meinprogramm\test.txt Um die Datei richig zu speichern, benötige ich nun den Pfad c:\program files\Meinprogramm\test.txt Danke im voraus Ingo |
Re: [Vista] lokalisierter Dateiname => realer Dateinamen
Habe inzwischen herausgefunden, dass beim abspeichern im Programmverzeichnis, also real 'c:\program files' der lokalisierte Name beim kopieren von Dateien automatisch angepasst wird.
Ich gehe dabei folgendermaßen vor: Vor dem abspeichern überprüfe ich mittels DirectoryExists ob das Verzeichnis bereits existiert. Wenn nicht erstelle ich es mit ForceDirectories. Mit dem Programmverzeichnis klappt dies auch unter Vista bei Angabe des lokalisierten Verzeichnisnamens. Wird allerdings als Zielverzeichnis (lokalisiert) z. Bsp. das Verzeichnis 'c:\Benutzer' angegeben, wird ein neues (reales) Verzeichnis 'c:\Benutzer' erstellt und die Datei dann darin gespeichert. Im Explorer werden dann (natürlich) zwei Verzeichnisse 'c:\Benutzer' angezeigt, was recht seltsam anmutet und nicht passieren sollte. Da meine Anwender den Speicherort frei wählen können dürfen, möchte ich wie o.g. den lokalisierten Verzeichnisnamen in den realen wieder umwandeln. Daher: Wie kann ich das umsetzen? Danke im voraus für die Hilfe. Ingo |
Re: [Vista] lokalisierter Dateiname => realer Dateinamen
Die automatische Korrektur von Programme nach "Program Files" funktioniert auch nur, wenn unter Vista der entsprechende Junction Point erstellt ist. Bei einem deutschen Vista mit schwedischem Sprachpack ist das zum Beispiel nicht der Fall. Ich vermute mal, daß ein englisches Vista mit deutschem Sprachpack dasselbe Problem zeigt.
Ich vermute mal, daß man eine Funktion schreiben muß, die systematisch für jeden Ordner die lokalisierten und realen Dateinamen vergleicht. Sobald der Dateiname gefunden wurde, geht man in die nächste Ebene... SHGetLocalizedName sollte man übrigens nur für Dateien nehmen, nicht für Verzeichnisse. So steht es zumindest im Platform SDK. |
Re: [Vista] lokalisierter Dateiname => realer Dateinamen
Zitat:
Wenn nicht, dann könnte man sich da ja mit 'nem "virtullem" Dateinamen aushelfen: irgendeinen Dateinamen anhängen De(Lokalisieren) und den Dateinamen wieder entfernen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:16 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