Fórum Serial HD #426131

13/10/2012

0

Ja sei que este assunto é batido,mas ja conseguiram um código para capturar o serial(HArd)de um HD SATA?
Vtrx

Vtrx

Responder

Post mais votado

15/10/2012

Tentou utilizar o comando que captura o serial normal???
Deu algum erro??

Alisson Santos

Alisson Santos
Responder

Gostei + 1

Mais Posts

15/10/2012

Vtrx

O comum só captura de Hds IDE.
Responder

Gostei + 1

17/10/2012

Vtrx

Ja tenho oque precisava.
Capturar serial físico de HD IDE,SATA,SCSI para controle de Software.
Se alguem interessar pasoo o procedimento.
Responder

Gostei + 0

27/10/2012

Singular Ti


Ja tenho oque precisava.
Capturar serial físico de HD IDE,SATA,SCSI para controle de Software.
Se alguem interessar pasoo o procedimento.


Legal amigo que bom que conseguiu... Se puder compartilhar com toda a galera aqui sera interessante. Eu mesmo tenho interesse em conhecer. Abraços!!
Responder

Gostei + 0

28/10/2012

Vtrx

Segue link com projeto Delphi 7.
Sei que que para Delphi 2010 e posterior,vai ter que alterar as variaveis que usam String.
http://www.4shared.com/rar/dQMz1vs1/smart.html
No meu caso eu fiz a rotina com apenas oque me interesava,o numero serial.
Na função principal, 0 é o HD C/;,1 é D/; etc.
Testado com SATA,IDE.
Responder

Gostei + 0

28/10/2012

Vtrx

[url]http://www.4shared.com/rar/dQMz1vs1/smart.html[/url]
Responder

Gostei + 0

28/10/2012

Vtrx

Como não dá para editar,to relembrando.
Para Win 7,tem que executar como ADM(mouse direito).
Responder

Gostei + 0

29/10/2012

Luiz Eduardo

Como não dá para editar,to relembrando.
Para Win 7,tem que executar como ADM(mouse direito).



Parabéns pelo códido amigo, e muito obrigado por compartilhá-lo conosco. Realmente funciona!! Aliás o único que ja vi que tanto funciona pra IDE'S quanto pros SATA.

Agora me diz uma coisa:

eu andei pesquisando muito na tentativa de achar um source que me mostrasse exatamente o serial físico, nessa busca frustrada acabei encontrando apenas um que mostra o serial lógico, pros HD SATA, o que não convem >>


                   ¬   VOL.HARD DISKS SATA 


Function GetSerialID: string;
var
lpVolumeNameBuffer : PChar;
lpFileSystemNameBuffer : PChar;
nVolumeNameSize : DWORD;
lpVolumeSerialNumber : DWORD;
lpMaximumComponentLength : DWORD;
lpFileSystemFlags : DWORD;
nFileSystemNameSize : DWORD;
begin
Result := '';
GetMem( lpVolumeNameBuffer, MAX_PATH + 1 );
GetMem( lpFileSystemNameBuffer, MAX_PATH + 1 );
try
nVolumeNameSize := MAX_PATH + 1;
nFileSystemNameSize := MAX_PATH + 1;
if GetVolumeInformation( PChar( 'C:\' ), lpVolumeNameBuffer,
nVolumeNameSize,
@lpVolumeSerialNumber, lpMaximumComponentLength, lpFileSystemFlags,
lpFileSystemNameBuffer, nFileSystemNameSize ) then
begin
result := IntToStr(lpVolumeSerialNumber);
end;
finally
FreeMem( lpVolumeNameBuffer );
FreeMem( lpFileSystemNameBuffer );
end;
end;

Procedure TForm1.FormCreate(Sender: TObject);
begin
Label1.Caption := (GetSerialID);
end;

end.



UMA CURIOSIDADE:

No caso da função acima eu teria como chamá-la por exemplo em um IdMessge1.Boby.Add(function);

Nesse seu código que você disponibilizou pra galera, qual nome da função e em qual arquivo a mesma se encontra naquele ZIP, a qual eu também possa chamá-la no IdMessage1?

E uma outra coisa que queria saber que já houvi falar foi em serial da placa mãe como uma outra medida de segurança pra aplicação. Afinal, existe mesmo uma função pra limitar o programa a placa mãe do usuário?

Abração a a todos e valeu!!
Responder

Gostei + 0

29/10/2012

Vtrx

Olá.
Voce poderia tentar assim;
.....
var
  Form1: TForm1;

Const
  DISCO  = '123456';

.......
procedure TForm1.Button1Click(Sender: TObject);
var
    errinfo, model, serial: string ;
    diskbytes: int64 ;
    SmartResult: TSmartResult ;
begin
    if MagWmiSmartDiskInfo (0, errinfo, model, serial, diskbytes) then begin
            if DISCO <> Serial then  begin
          MessageBox(Application.Handle ,'Hardware não Habilitado','Erro',MB_OK + MB_ICONINFORMATION );
            exit;
            end;
      end
        else
          MessageBox(Application.Handle ,'Hardware Habilitado','Confirmação',MB_OK + MB_ICONINFORMATION );
          Label2.Caption:='Numero serial:' + serial;
        exit ;

end;


Crie um outro projeto com os mesmos arquivos do exemplo,e coloque apenas um Button e um Label.
A Constante 'DISCO',é o número serial que voce capturou do PC que vai rodar o programa.
Um observação é que quando voce fizer um pequeno programinha para capturar o serial do HD da máquina,voce tem que capturar o serial e colocar num Edit,pois de outro modo na hora de comparar,indica que não é igual.
Não sei se insere espaços ou outro simbolo não visível.
Eu fiz um programainha que captura o serial e grava num arquivo txt num pendriver.
Esse exemplo do botão não capturar drivers 'Scsi',para pegá-los tem que ver o código completo do exemplo que postei.
Ele verifica se é IDE/SATA,se não for a rotina MagWmiScsiDiskInfo captura.
Na verdade voce pode capturar todas as informações do Hardware,mas aí fica muito longo...
Responder

Gostei + 0

29/10/2012

Vtrx

Relembrando.
MagWmiSmartDiskInfo (0, errinfo, model, serial, diskbytes) 

0 é o driver C(raiz),1,2 etc são os outros por ordem.
model é o Modelo do HD.
serial ja sabe...
duskbytes é a capacidade do HD (tamanho).
Responder

Gostei + 0

30/10/2012

Luiz Eduardo

Olá.
Voce poderia tentar assim;
.....
var
  Form1: TForm1;

Const
  DISCO  = '123456';

.......
procedure TForm1.Button1Click(Sender: TObject);
var
    errinfo, model, serial: string ;
    diskbytes: int64 ;
    SmartResult: TSmartResult ;
begin
    if MagWmiSmartDiskInfo (0, errinfo, model, serial, diskbytes) then begin
            if DISCO <> Serial then  begin
          MessageBox(Application.Handle ,'Hardware não Habilitado','Erro',MB_OK + MB_ICONINFORMATION );
            exit;
            end;
      end
        else
          MessageBox(Application.Handle ,'Hardware Habilitado','Confirmação',MB_OK + MB_ICONINFORMATION );
          Label2.Caption:='Numero serial:' + serial;
        exit ;

end;


VTRX, o seu código acima deu um monte de erro de compilação, acho que foi por conta daqueles exit's que vc havia colocado rsrs.

Agora tá dando o seguinte >>

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var
errinfo, model, serial: string ;
diskbytes: int64 ;
SmartResult: TSmartResult ;

begin
if MagWmiSmartDiskInfo (0, errinfo, model, serial, diskbytes) then
begin
if DISCO <> Serial then begin
MessageBox(Application.Handle ,'Hardware não Habilitado','Erro',MB_OK + MB_ICONINFORMATION );
end;
MessageBox(Application.Handle ,'Hardware Habilitado','Confirmação',MB_OK + MB_ICONINFORMATION );
end;
Label1.Caption:='Numero serial:' + serial;
 end;
end.
 


[Error] Unit1.pas(35): Undeclared identifier: 'TSmartResult'

[Error] Unit1.pas(38): Undeclared identifier: 'MagWmiSmartDiskInfo'

REFERENTE AO CÓDIGO ACIMA, DEPOIS QUE EU ORGANIZEI MAIS ELE.

Poderia dá uma forcinha aí parcero?

Valeu!!
Responder

Gostei + 0

30/10/2012

Claudia Nogueira

Eduardo baixa esse arquivo [url]http://www.cdnweb.com.br/magwmi53.zip[/url] descompacta, adiciona as units smartapi, WbemScripting_TLB, magwmi e magsubs1 ao projeto. Instancia as units no magwmi, magsubs1 no uses do form.

O código inteiro do form para o exemplo ficou assim:

unit Unit1;

interface

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

Const
  DISCO = '123456';

type
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    Label2: TLabel;
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

Uses magwmi, magsubs1;

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
Var
  errinfo, model, serial: string;
  diskbytes: int64;
  SmartResult: TSmartResult;
begin
  if MagWmiSmartDiskInfo (0, errinfo, model, serial, diskbytes) then
  begin
    if DISCO <> Serial then
    begin
      MessageBox(Application.Handle ,'Hardware não Habilitado','Erro',MB_OK + MB_ICONINFORMATION );
      Exit;
    end;
  end
  else
    MessageBox(Application.Handle ,'Hardware Habilitado','Confirmação',MB_OK + MB_ICONINFORMATION );
  Label2.Caption:='Numero serial:' + serial;
end;

end.

Responder

Gostei + 0

30/10/2012

Luiz Eduardo

Eduardo baixa esse arquivo [url]http://www.cdnweb.com.br/magwmi53.zip[/url] descompacta, adiciona as units smartapi, WbemScripting_TLB, magwmi e magsubs1 ao projeto. Instancia as units no magwmi, magsubs1 no uses do form.

O código inteiro do form para o exemplo ficou assim:

unit Unit1;

interface

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

Const
  DISCO = '123456';

type
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    Label2: TLabel;
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

Uses magwmi, magsubs1;

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
Var
  errinfo, model, serial: string;
  diskbytes: int64;
  SmartResult: TSmartResult;
begin
  if MagWmiSmartDiskInfo (0, errinfo, model, serial, diskbytes) then
  begin
    if DISCO <> Serial then
    begin
      MessageBox(Application.Handle ,'Hardware não Habilitado','Erro',MB_OK + MB_ICONINFORMATION );
      Exit;
    end;
  end
  else
    MessageBox(Application.Handle ,'Hardware Habilitado','Confirmação',MB_OK + MB_ICONINFORMATION );
  Label2.Caption:='Numero serial:' + serial;
end;

end.




Brigadão Claudia! deu certo!!

Agora tem como fazer disso uma função tipo String, tirar este Label e substituir por um IdMessage.Body.Add(função);

??

Valeu.
Responder

Gostei + 0

30/10/2012

Benedito Assis.

Claudia.

Segue seu exemplo, esta dando erro hardware não habilitado.
Responder

Gostei + 0

30/10/2012

Benedito Assis.

Claudia.

Estou confuso, executando não teria que dar o serial do hd.
Responder

Gostei + 0

30/10/2012

Luiz Eduardo

Claudia.

Estou confuso, executando não teria que dar o serial do hd.



Caro Bene, segue abaixo as modificações que fiz depois de colocar as units necessárias na mesma pasta do projeto (bem como a Claudia falou acima), não tem erro!! >>


¬ Serial Hard Disk Physical

Uses: (magwmi, magsubs1);

            var
  Form1: TForm1;
  Const
DISCO = '123456';

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

Var
errinfo, model, serial: string;
diskbytes: int64;
SmartResult: TSmartResult;
begin
if MagWmiSmartDiskInfo (0, errinfo, model, serial, diskbytes) then
begin
if DISCO <> Serial then
begin
Label1.Caption:='Numero serial:' + serial;
end;
end;
end;
end.



Se depois de salvar der aparecer que a variável SmartResult: TSmartResult; está ali mas nunca foi usada pela procedure Button, simplesmente ignore e compile mais um vez, que vai.

Espero que tenha lhe ajudado.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar