![]() |
Vollen Dateinamen aus 8.3-Format ermitteln
Hallo,
ich habe folgende Situation: Meine Anwendung ist in das Kontext-Menü des Windows-Explorers (Windows 7) eingebunden. Es bekommt über den ersten Parameter einen Dateinamen geliefert. In der Anwendung landet dann der Dateiname im verkürzten 8.3-Format. Auch die enthaltenen Pfade sind derart verkürzt. Aus HalloWindows7.txt wird HALLOW~1.TXT. Für die weitere Verarbeitung benötige ich aber die korrekten Pfad- und Datei-Angaben. Mal abgesehen davon, dass ich nicht verstehe, warum ich den Namen so vom Betriebssystem geliefert bekomme, suche ich eine Funktion, die mir die richtigen Angaben liefert. Ein wenig Source:
Delphi-Quellcode:
var
Filename : String; begin ... Filename := ParamStr(1); ShowMessage(Filename); // Zeigt nur verkürztes 8.3-Format ... end; |
AW: Echter Dateiname zu 8.3-Format
Dafür gibt es eigene Funktionen, schau mal hier:
![]() |
AW: Echter Dateiname zu 8.3-Format
Entweder verstehe ich Dich nicht, oder der Threadtitel und die Problembeschreibung sind exakt gegenteilig :-) Wie dem auch sei, ich denke, mit
![]() ![]() |
AW: Echter Dateiname zu 8.3-Format
|
AW: Echter Dateiname zu 8.3-Format
Danke. Ich hatte einfach nicht den richtigen Suchbegriff für Tante Google.
Natürlich sind beides "richtige" Dateinamen, Himitsu. Habe jetzt ![]() @DeddyH: Habe den Titel mal angepasst, damit es klarer wird. |
AW: Echter Dateiname zu 8.3-Format
Wie ist dein Programm an den Explorer angebunden? Sobald veraltete APIs oder ANSI-APIs ins Spiel kommen, verfällt Windows machmal gern auf Kompatibilitätsmodi zurück.
|
AW: Vollen Dateinamen aus 8.3-Format ermitteln
Unter HKEY_CLASSES_ROOT\*\Shell\MeinProgramm\Command habe ich eine Zeichenfolge für mein Programm gemacht.
Innerhalb meines Programms hole ich mir dann nur noch den Eintrag aus dem ersten übergebenen Parameter. Es gibt keine weiteren API-Aufrufe oder ähnliches. |
AW: Vollen Dateinamen aus 8.3-Format ermitteln
Gibt ja tausende Möglichkeiten.
Verschiedene Arten der Pfade und Parameter: abc %1 x:\abc.exe %1 x:\abc.exe "%1" x:\abc.exe %* "x:\abc.exe" "%1" "x:\abc.exe" %* DDE OLE ... |
AW: Vollen Dateinamen aus 8.3-Format ermitteln
Bei mir steht x:\abc.exe %1
Ich nehme es dann, wie es vom OS geliefert wird. [EDIT] Ich habe jetzt deine grüne Variante eingetragen. Jetzt bekomme ich es, wie von mir gewünscht. Danke. |
AW: Vollen Dateinamen aus 8.3-Format ermitteln
Windows macht hier kein " um den Parameter drum, wenn es nötig wäre,
stattdessen gibt es halt den kurzen Pfad, wo keine Leerzeichen drin vorkommen können. |
AW: Vollen Dateinamen aus 8.3-Format ermitteln
Nachdem ich die Einträge so gemacht und darüber nachgedacht hatte, konnte ich das nachvollziehen.
Aber wenn man selten mit sowas zu tun hat, braucht man eben den richtigen Schubser. :wink: |
AW: Vollen Dateinamen aus 8.3-Format ermitteln
Der genaue Grund ist, dass man im Prinzip auch sowas machen kann
Delphi-Quellcode:
Es ist halt bissl "ungewöhnlich", dass %1 anders als "%1" oder %* erweitert wird.
meine.exe -input=%1 -output=%2
%* = alle Parameter %1 %2 %3 = gezielt nur Einer |
AW: Vollen Dateinamen aus 8.3-Format ermitteln
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:51 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