Olá pessoal, vamos ver neste artigo como podemos pegar o serial da placa mãe do computador onde o nosso sistema estará rodando. Isso é legal para podermos validar pelo Hardware as máquinas que tem direito de acessar o sistema.

Iniciaremos agora criando um novo projeto em Delphi e iremos adicionar um TButton no mesmo, abaixo temos o layout bem simples do formulário.

Layout do Formulári

Figura 1. Layout do Formulário

Nesta parte do código vamos criar uma função dentro da classe do nosso formulário, para obtermos uma reutilização da função em outros momentos necessários, o ideal seria colocar a mesma em uma unit separada do formulário, fica ai a dica para quem quiser separar, ok ?

Vamos ser práticos agora, veja a declaração da função.


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Registry, WinProcs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    function GetSerialMotherBoard: String;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
end.

Agora, precisamos implementar a function declarada, para isso vamos colocar o curso do mouse dentro da Classe TForm, e pressionar CTRL+SHIF+C, em seguida o Delphi fará a mágica de implementar a mesma, como mostra o código abaixo :


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Registry, WinProcs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    OpenDialog1: TOpenDialog;
  private
    { Private declarations }
    function GetSerialMotherBoard: String;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.GetSerialMotherBoard: String;
begin
 
end;

end.

Neste momento vamos implementar nosso código dentro da function criada anteriormente, para isso localize a mesma dentro da unit e implemente o código abaixo:


function TForm1.GetSerialMotherBoard: String;
var
  a, b, c, d: LongWord;
begin
  asm
    push EAX
    push EBX
    push ECX
    push EDX

    mov eax, 1
    db $0F, $A2
    mov a, EAX
    mov b, EBX
    mov c, ECX
    mov d, EDX

    pop EDX
    pop ECX
    pop EBX
    pop EAX

  end;
  result := inttohex(a, 8) + '-' +
            inttohex(b, 8) + '-' +
            inttohex(c, 8) + '-' +
            inttohex(d, 8);
end;

 

Observe que temos um retorno, no caso o result e agora podemos capturar esta informação a qualquer momento! Como assim ?

Vamos ver algumas dicas de como fazer isso.

No evento onClick do nosso TButton implemente o seguinte:


procedure TForm1.Button1Click(Sender: TObject);
begin
  Caption := GetSerialMotherBoard;
  ShowMessage(GetSerialMotherBoard);
end;

No evento colocamos o serial para aparecer na barra de títulos(caption) e também podemos exibir em uma mensagem.

A dica final seria salvar esta informação(GetSerialMotherBoard) dentro de um Banco de Dados e na hora que abríssemos o sistema testaríamos se o serial da placa mãe é encontrado na nossa tabela e assim validar se é uma máquina cadastrada.

Um grande abraço a todos!