AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Delphi-PRAXiS - Lounge Betriebssysteme [Vista] lokalisierter Dateiname => realer Dateinamen
Thema durchsuchen
Ansicht
Themen-Optionen

[Vista] lokalisierter Dateiname => realer Dateinamen

Ein Thema von IB-Software · begonnen am 18. Jun 2007 · letzter Beitrag vom 29. Okt 2007
Antwort Antwort
IB-Software

Registriert seit: 20. Nov 2004
Ort: Berlin
16 Beiträge
 
Delphi 7 Professional
 
#1

[Vista] lokalisierter Dateiname => realer Dateinamen

  Alt 18. Jun 2007, 14:58
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
IB-Software: Software für Entwickler
Z-UpMaker: http://www.zupmaker.de (Vista kompatibel)
IB-Zip-DLL: http://www.zip-dll.de (Vista kompatibel)
UpdateMaker: http://www.updatemaker.de (Vista kompatibel)
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: [Vista] lokalisierter Dateiname => realer Dateinamen

  Alt 18. Jun 2007, 15:13
Microsoft empfielht SHGetLocalizedName(), ich verwende ShGetFileInfo() mit dem Flag "SHGFI_DISPLAYNAME" und finde das netter, weil es diese Funktion auch unter früheren Windows-Versionen gibt.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#3

Re: [Vista] lokalisierter Dateiname => realer Dateinamen

  Alt 18. Jun 2007, 15:27
In einem der letzten Vista Videos wurde auf diese Problematik auch eingegangen, und gezeigt wie es geht.
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: [Vista] lokalisierter Dateiname => realer Dateinamen

  Alt 18. Jun 2007, 15:30
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.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
IB-Software

Registriert seit: 20. Nov 2004
Ort: Berlin
16 Beiträge
 
Delphi 7 Professional
 
#5

Re: [Vista] lokalisierter Dateiname => realer Dateinamen

  Alt 18. Jun 2007, 16:13
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
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: [Vista] lokalisierter Dateiname => realer Dateinamen

  Alt 18. Jun 2007, 16:36
Zitat von IB-Software:
pszPath ist ja noch klar = pchar
Nope, aber PWideChar
Delphi-Quellcode:
function SHGetLocalizedName(
    pszPath: PWideChar;
    var pszResModule: PWideChar;
    cch: UINT;
    var pidsRes: Integer;
): HRESULT; stdcall;
......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
IB-Software

Registriert seit: 20. Nov 2004
Ort: Berlin
16 Beiträge
 
Delphi 7 Professional
 
#7

Re: [Vista] lokalisierter Dateiname => realer Dateinamen

  Alt 21. Jun 2007, 10:20
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
IB-Software: Software für Entwickler
Z-UpMaker: http://www.zupmaker.de (Vista kompatibel)
IB-Zip-DLL: http://www.zip-dll.de (Vista kompatibel)
UpdateMaker: http://www.updatemaker.de (Vista kompatibel)
  Mit Zitat antworten Zitat
IB-Software

Registriert seit: 20. Nov 2004
Ort: Berlin
16 Beiträge
 
Delphi 7 Professional
 
#8

Re: [Vista] lokalisierter Dateiname => realer Dateinamen

  Alt 22. Jun 2007, 08:34
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
IB-Software: Software für Entwickler
Z-UpMaker: http://www.zupmaker.de (Vista kompatibel)
IB-Zip-DLL: http://www.zip-dll.de (Vista kompatibel)
UpdateMaker: http://www.updatemaker.de (Vista kompatibel)
  Mit Zitat antworten Zitat
Lasse2002

Registriert seit: 29. Nov 2004
79 Beiträge
 
RAD-Studio 2009 Pro
 
#9

Re: [Vista] lokalisierter Dateiname => realer Dateinamen

  Alt 7. Sep 2007, 10:42
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.
Lasse
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#10

Re: [Vista] lokalisierter Dateiname => realer Dateinamen

  Alt 29. Okt 2007, 19:55
Zitat von Lasse2002:
SHGetLocalizedName sollte man übrigens nur für Dateien nehmen, nicht für Verzeichnisse. So steht es zumindest im Platform SDK.
hab jetzt nich nachgesehn, aber funktioniert SHGetLocalizedName nur bei reellen Dateien, oder mu die Datei nicht existieren?

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:57 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