// Getestet mit D4 unter XP
// Hiermit kann man
lange Dateinamen anhand des kurzen 8+3 Namens finden
// Variante 1
function LangName(pfad: string): string;
var sr: TWin32FindData;
h: THandle;
begin
result := '';
repeat
h := FindFirstFile(PChar(pfad), sr);
result := '\' + string(sr.cFileName) + result;
windows.FindClose(h);
SetLength(pfad, length(ExtractFilePath(pfad)) - 1);
if length(pfad) < 3 then break;
until false;
result := pfad + result;
end;
// Beispielaufruf
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(LangName('c:\progra~1'));
end;
//
Variante 2
uses shlobj;
function ShortToLong(ShortName: string): string;
var
isf: IShellFolder;
pidl: PITEMIDLIST;
p: PChar;
n, a: Cardinal;
begin
pidl := nil;
SHGetDesktopFolder(isf);
isf.ParseDisplayName(0, nil, StringToOleStr(ShortName), n, pidl, a);
getmem(p, max_path);
if not SHGetPathFromIDList(pidl, p) then
result := '' else result := p;
freemem(p);
end;
// Beispielaufruf
procedure TForm1.Button2Click(Sender: TObject);
begin
showmessage(ShortToLong('c:\progra~1'));
end;
//
----------------------------------------------------------------------
// Hiermit kann man die 8+3 Dateinamen anhand des langen Namens finden
function DosName(lang: string): string;
var
p: Pchar;
f: DWord;
begin
getmem(p, max_path);
f := getshortpathname(pchar(lang), p, max_path);
if (f = ERROR_INVALID_PARAMETER) or (f = 0)
then result := '' else
result := p;
freemem(p);
end;
// Beispielaufruf
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(DosName(
'C:\Dokumente und Einstellungen\All Users'));
end;
|