Вверх ↑
Разработчик
Ответов: 26068
Рейтинг: 2121
#1: 2011-11-17 12:42:49 ЛС | профиль | цитата
Попробуй еще вот так


function GetLabelDisk(Drv: Char; VolReal: Boolean): string;
var WinVer: Byte;
DriveType, NotUsed: DWORD;
// Buf: array [0..MAX_PATH - 1] of Char;
Buf: string;
function DisplayName(Drv: Char): string;
var SFI: TSHFileInfo;
begin
FillChar(SFI, SizeOf(SFI), 0);
SHGetFileInfo(PChar(Drv + ':\'), 0, SFI, SizeOf(SFI), SHGFI_DISPLAYNAME);
Result := SFI.szDisplayName;
// Â Win9x, Me - íåò ìåòêè äèñêà -> #32 + (x:)
// Â WinNT 5.x - íåò ìåòêè äèñêà -> Íàçâàíèå óñòðîéñòâà + #32 + (x:)
if Pos('(', Result) <> 0 then
SetLength(Result, Pos('(', Result) - 2);
end;

begin
Result := '';
WinVer := LOBYTE(LOWORD(GetVersion));
DriveType := GetDriveType(PChar(Drv + ':\'));

if {(WinVer <= 4) and }(DriveType <> DRIVE_REMOVABLE) or VolReal then
begin // Win9x, Me, NT <= 4.0
// Buf[0] := #0;
// GetVolumeInformation(PChar(Drv + ':\'), Buf, DWORD(SizeOf(Buf)), nil,
// NotUsed, NotUsed, nil, 0);
SetLength(Buf, MAX_PATH - 1);
GetVolumeInformation(PChar(Drv + ':\'), @Buf[1], MAX_PATH - 1, nil, NotUsed, NotUsed, nil, 0);

Result := Buf;
if VolReal {and (WinVer >= 5)} and (Result <> '') and
(DriveType <> DRIVE_REMOVABLE) then // Win2k, XP è âûøå
Result := DisplayName(Drv)
else if (Result = '') and (not VolReal) then
Result := '<none>';
end
else
Result := DisplayName(Drv);
end;
карма: 22

0