En ocasiones es necesario saber el nombre que Windows da a una unidad de disco. Conseguir el label de la unidad es fácil con la API GetVolumeInformation:
var Vol: array [0..256] of char; T: DWORD; begin GetVolumeInformation(PCHAR(Edit1.text), @Vol[0], 255, @T, T, T,0,0); end;
Pero sólo obtenemos la etiqueta, no el nombre que le da el explorador, por ejemplo al disco C:\ le suele llamar "SISTEMA (C:)".
Podemos reconstruir esa cadena a partir de la letra de unidad y la etiqueta o complicarnos un poco mas y pedirle al Shell, a través de IShellFolder Interface, que nos de el nombre específico. Para ello implementaremos una función como esta:
uses shlobj; function GetDriveName(Drive: String): String; var Desk: ISHELLFOLDER; pidl: PITEMIDLIST; StrRet: TSTRRET; begin Result:= ''; if SUCCEEDED(SHGetDesktopFolder(Desk)) then begin Desk.ParseDisplayName(0, nil, StringToOleStr(Drive), ULONG(nil^), pidl, ULONG(nil^)); Desk.GetDisplayNameOf(pidl, SHGDN_NORMAL, StrRet); case StrRet.uType of STRRET_WSTR: Result:= StrRet.pOleStr; STRRET_OFFSET: Result:= PCHAR(pidl) + StrRet.uOffset; STRRET_CSTR: Result:= StrRet.cStr; end; Desk._Release(); end; end;
La usaremos así, por ejemplo:
Label1.Caption:= GetDriveName('C:\');
Saludos.