Ir para conteúdo
Fórum Script Brasil
  • 0

como listar drives do pc


vms

Pergunta

ola pessoal

estou usando o c++ builder6

como faço para listar todos os drives do computador em um combobox?

*C:\

*disquete

*pendrives

*mapeamento de redes

eu encontrei a função abaixo em delphi, mas não consegui traduzir :(

se alguém tem uma função ou possa me ajudar a traduzir esta ai eu agradeço.

codigo em delphi

function GetDrivers: TStringList;
VAR
Driver : Char;
begin
Result := TStringList.Create;
for Driver :='A' TO 'Z' DO
begin
case GetDriveType(PChar(Driver+':\')) of
DRIVE_REMOVABLE:
Result.ADD(driveR+':\');
DRIVE_FIXED:
Result.ADD(driveR+':\');
DRIVE_REMOTE:
Result.ADD(driveR+':\');
DRIVE_CDROM:
Result.ADD(driveR+':\');
end;
end;
end;
tentativa de trdução delphi para c++
void GetDrivers(TStringList)
{
  Char Driver ;
  String Result;
  Result = new TStringList->Create;
  for (Driver = "A"; Driver = "Z"; )
    {
      switch ( GetDriveType(PChar(Driver+":\"))
        {
          DRIVE_REMOVABLE:
          Result->ADD(driveR+":\");
          DRIVE_FIXED:
          Result->ADD(driveR+":\");
          DRIVE_REMOTE:
          Result->ADD(driveR+":\");
          DRIVE_CDROM:
          Result->ADD(driveR+":\");
        }
    }
}

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

A função GetDriveType(), da API do Windows, até como o próprio nome diz, apenas informa qual o tipo do drive. Para obter uma lista dos drives lógicos da máquina, deve-se usar a função GetLogicalDrives(), também da API do Windows. Ela não exige qualquer argumento e retorna uma DWORD com os drives em um bitmask. A partir do MSB do valor, 0=drive A, 1=drive B, 2=drive C, e assim por diante. Depois, com a lista em mãos, pode-se usar GetDriveType() para saber que tipo é.

Link para o comentário
Compartilhar em outros sites

  • 0
Bem, não sou muito bom em C, mas você testou o codigo de delphi antes de traduzir?

sim, deu certo

A função GetDriveType(), da API do Windows, até como o próprio nome diz, apenas informa qual o tipo do drive. Para obter uma lista dos drives lógicos da máquina, deve-se usar a função GetLogicalDrives(), também da API do Windows. Ela não exige qualquer argumento e retorna uma DWORD com os drives em um bitmask. A partir do MSB do valor, 0=drive A, 1=drive B, 2=drive C, e assim por diante. Depois, com a lista em mãos, pode-se usar GetDriveType() para saber que tipo é.
ola maligno, basiado na sua dica, procurei por essa função e encontrei um exemplo(abaixo) compila direitinho, mas não to sabendo como usar. alguém pode dar uma dica como usar com um combobox? o que eu coloco nesse ( )? ComboBox2->Items->AddStrings(GetLogicalDriveStringsW());
UINT WINAPI GetLogicalDriveStringsW( UINT len, LPWSTR buffer )
{
    DWORD drives = GetLogicalDrives();
    UINT drive, count;
    for (drive = count = 0; drive < 26; drive++) if (drives & (1 << drive)) count++;
    if ((count * 4) + 1 > len) return count * 4 + 1;

    for (drive = 0; drive < 26; drive++)
    {
        if (drives & (1 << drive))
        {
            *buffer++ = 'a' + drive;
            *buffer++ = ':';
            *buffer++ = '\\';
            *buffer++ = 0;
        }
    }


    *buffer = 0;
    return count * 4;
}

Link para o comentário
Compartilhar em outros sites

  • 0
ComboBox2->Items->AddStrings(GetLogicalDriveStringsW());

O método AddStrings() da classe TStrings não é o ideal, pois ele é utilizado para inserir um objeto TStrings em outro. Não é o caso, claro. Você precisa setar o texto da classe diretamente ou por um setter. Então, ou você usa a propriedade Text ou usa o método SetText(). Lembrando que o texto é um ponteiro para char. Em suma: seria mais ou menos...

ComboBox2->Items->SetText(<texto_qualquer>);

ou

ComboBox2->Items->Text = <texto_qualquer>;

A função que encontrou, se você notar, devolve um UINT ao invés de um ponteiro para char. Não serve. Mas use o esqueleto dela pra fazer sua função de montagem dessa string. Mas note que os valores de cada linha (drive) devem ser terminados por um par CR/LF ("/r/n").

Para mais detalhes, leia o help sobre TStrings. E depois, se precisar, sobre TComboBox.

Lembrando que há outros meios de inserir strings num objeto TStrings. Eu só comentei sobre um deles. Por isso é importante ler o help.

Editado por Maligno
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...