// 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; 


Zugriffe seit 6.9.2001 auf Delphi-Ecke