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.
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
- 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.
- 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
eFlags
são variáveis auxiliares. -
DLabel
é um array de caracteres para armazenar o rótulo do volume.
- 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, usamosGetVolumeInformation
para obter informações sobre o volume. A função preenche a variávelSerial
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 deDWord
para uma string hexadecimal usandoIntToHex
. -
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.