As três funções mostradas abaixo retornam as unidades de armazenamento disponíveis no computador, sendo que as duas primeiras são equivalentes, enquanto que a terceira tem um retorno um pouco diferente.
function PegaUnidades1: string; var Drives: DWord; I: Byte; begin Result := ''; Drives := GetLogicalDrives; if Drives <> 0 then begin for I := 0 to 25 do { A..Z } begin if Drives and (1 shl I) <> 0 then Result := Result + Char(65 + I) { 65='A' } end; end; end; function PegaUnidades2: string; var Unidade: AnsiChar; begin Result := ''; for Unidade := 'A' to 'Z' do begin if GetDriveType(PAnsiChar(Unidade + ':\')) > 1 then Result := Result + Unidade; end; end; function PegaUnidades3: string; var Retorno: Cardinal; Unidades: array[0..104] of AnsiChar; { 26 * 4 + 1 bytes } Unidade: PAnsiChar; begin Result := ''; Retorno := GetLogicalDriveStrings(SizeOf(Unidades) - 1, Unidades); if Retorno > 0 then begin Unidade := Unidades; while Unidade^ <> #0 do begin if Result <> '' then Result := Result + #13; Result := Result + string(Unidade); Inc(Unidade, 4); end; end else RaiseLastOSError; end;
Para testar...
procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage('Retorno de PegaUnidades1:'#13 + PegaUnidades1); ShowMessage('Retorno de PegaUnidades2:'#13 + PegaUnidades2); ShowMessage('Retorno de PegaUnidades3:'#13 + PegaUnidades3); end;
O conteúdo desta página pode ajudar alguém? Compartilhe!