Como Obter o Número de Série do HD Usando Delphi

Como Obter o Número de Série do HD Usando Delphi

No desenvolvimento de software, especialmente quando se trata de segurança e identificação de hardware, pode ser necessário obter o número de série do HD. Em Delphi, isso pode ser feito utilizando a função GetVolumeInformation da API do Windows. Neste post, vamos mostrar como você pode implementar essa funcionalidade.

Dicas de Delphi
Dicas de Delphi

Introdução

Obter o número de série do HD é uma tarefa que pode ser realizada com algumas chamadas à API do Windows. O exemplo a seguir mostra como isso pode ser feito em Delphi, utilizando a função SerialNum para obter o número de série de uma unidade de disco específica.

Código-Fonte

Abaixo está o código para a função SerialNum, que recebe a letra da unidade de disco como parâmetro e retorna o número de série como uma string.

function TForm1.SerialNum(FDrive: String): String;
var
  Serial: DWord;
  DirLen, Flags: DWord;
  DLabel: array[0..11] of Char;
begin
  try
    GetVolumeInformation(PChar(FDrive + ':\'), DLabel, 12, @Serial, DirLen, Flags, nil, 0);
    Result := IntToHex(Serial, 8);
  except
    Result := '';
  end;
end;

Vamos analisar o código linha por linha para entender o que ele faz.

Explicação do Código

  1. Declaração da Função
   function TForm1.SerialNum(FDrive: String): String;

Esta linha declara a função SerialNum que recebe uma string (FDrive) e retorna uma string.

  1. Variáveis para Armazenar Dados
   var
     Serial: DWord;
     DirLen, Flags: DWord;
     DLabel: array[0..11] of Char;

Aqui, declaramos várias variáveis:

  • Serial para armazenar o número de série do volume.
  • DirLen e Flags são variáveis auxiliares.
  • DLabel é um array de caracteres para armazenar o rótulo do volume.
  1. Bloco Try-Except
   try
     GetVolumeInformation(PChar(FDrive + ':\'), DLabel, 12, @Serial, DirLen, Flags, nil, 0);
     Result := IntToHex(Serial, 8);
   except
     Result := '';
   end;

O bloco try-except garante que, caso ocorra algum erro durante a execução do código, a função retornará uma string vazia.

  • Chamada à API do Windows GetVolumeInformation(PChar(FDrive + ':\'), DLabel, 12, @Serial, DirLen, Flags, nil, 0); Aqui, usamos GetVolumeInformation para obter informações sobre o volume. A função preenche a variável Serial com o número de série do volume.
  • Conversão do Número de Série Result := IntToHex(Serial, 8); Convertemos o número de série de DWord para uma string hexadecimal usando IntToHex.
  • Tratamento de Erros except Result := ''; end; Em caso de erro, a função retorna uma string vazia.

Exemplo Prático

Vamos ver um exemplo de como usar essa função em um programa Delphi.

procedure TForm1.Button1Click(Sender: TObject);
var
  NumeroDeSerie: String;
begin
  NumeroDeSerie := SerialNum('C');
  ShowMessage('Número de Série do HD: ' + NumeroDeSerie);
end;

Neste exemplo, ao clicar em um botão, o número de série da unidade C será exibido em uma mensagem.

Conclusão

Obter o número de série do HD em Delphi é uma tarefa simples quando se conhece as funções certas da API do Windows. Com a função SerialNum, você pode facilmente integrar essa funcionalidade em seus projetos, melhorando a forma como lida com a identificação de hardware.

Com estas informações, você está pronto para aplicar essa funcionalidade em seus projetos Delphi. Se tiver dúvidas ou sugestões, deixe um comentário em nosso grupo no Facebook.

Posts Similares