Serial HD
Ja sei que este assunto é batido,mas ja conseguiram um código para capturar o serial(HArd)de um HD SATA?
Vtrx
Curtidas 1
Melhor post
Alisson Santos
15/10/2012
Tentou utilizar o comando que captura o serial normal???
Deu algum erro??
Deu algum erro??
GOSTEI 1
Mais Respostas
Vtrx
13/10/2012
O comum só captura de Hds IDE.
GOSTEI 1
Vtrx
13/10/2012
Ja tenho oque precisava.
Capturar serial físico de HD IDE,SATA,SCSI para controle de Software.
Se alguem interessar pasoo o procedimento.
Capturar serial físico de HD IDE,SATA,SCSI para controle de Software.
Se alguem interessar pasoo o procedimento.
GOSTEI 0
Singular Ti
13/10/2012
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!!
GOSTEI 0
Vtrx
13/10/2012
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.
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.
GOSTEI 0
Vtrx
13/10/2012
[url]http://www.4shared.com/rar/dQMz1vs1/smart.html[/url]
GOSTEI 0
Vtrx
13/10/2012
Como não dá para editar,to relembrando.
Para Win 7,tem que executar como ADM(mouse direito).
Para Win 7,tem que executar como ADM(mouse direito).
GOSTEI 0
Luiz Eduardo
13/10/2012
Como não dá para editar,to relembrando.
Para Win 7,tem que executar como ADM(mouse direito).
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!!
GOSTEI 0
Vtrx
13/10/2012
Olá.
Voce poderia tentar assim;
.....
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...
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...
GOSTEI 0
Vtrx
13/10/2012
Relembrando.
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).
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).
GOSTEI 0
Luiz Eduardo
13/10/2012
Olá.
Voce poderia tentar assim;
.....
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 >>
[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!!
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!!
GOSTEI 0
Claudia Nogueira
13/10/2012
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:
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.
GOSTEI 0
Luiz Eduardo
13/10/2012
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:
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.
GOSTEI 0
Benedito Assis.
13/10/2012
Claudia.
Segue seu exemplo, esta dando erro hardware não habilitado.
Segue seu exemplo, esta dando erro hardware não habilitado.
GOSTEI 0
Benedito Assis.
13/10/2012
Claudia.
Estou confuso, executando não teria que dar o serial do hd.
Estou confuso, executando não teria que dar o serial do hd.
GOSTEI 0
Luiz Eduardo
13/10/2012
Claudia.
Estou confuso, executando não teria que dar o serial do hd.
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.
GOSTEI 0
Vtrx
13/10/2012
Eu postei o pequeno exemplo do botão,baseado no projeto que disponibilizei no link,isto quer dizer que teria que ter refeito o projeto retirando as partes não usadas e não começando do zero.
GOSTEI 0
Vtrx
13/10/2012
Bene,voce leu todo o post?
Verifique se a unidade que quer ler o HD é a C:
Se não for,tem que mudar o numero zero da função para 1 ou 2 etc (leia observações acima).
Verifique se a unidade que quer ler o HD é a C:
Se não for,tem que mudar o numero zero da função para 1 ou 2 etc (leia observações acima).
GOSTEI 0
Luiz Eduardo
13/10/2012
VTRX,
Eu transformei o seu exemplo acima em uma função tipo String pra poseriormente ser chamada em uma outra parte do código, só que aqui no meu caso eu tenho uma procedure relacionada a Webcam, e depois que eu fiz essa transformação ficou assim >>
Só que agora está dando um erro de compilação nessa parte do código da Webcam >>
O erro é esse >>
[Error] Unit1.pas(509): Left side cannot be assigned to
Isso tem jeito de concertar eu eu serei obrigado abrir de mão do código da Cam?
Aguardo retorno.
Eu transformei o seu exemplo acima em uma função tipo String pra poseriormente ser chamada em uma outra parte do código, só que aqui no meu caso eu tenho uma procedure relacionada a Webcam, e depois que eu fiz essa transformação ficou assim >>
Uses: Magwmi, Magsubs1; var Form1: TForm1; Const DISCO = '123456'; Function SerialHD: String; var errinfo, model, serial: string; diskbytes: int64; SmartResult: TSmartResult; begin if MagWmiSmartDiskInfo (0, errinfo, model, serial, diskbytes) then begin if DISCO <> Serial then begin Result:='Numero serial:' + serial; end; end; end;
Só que agora está dando um erro de compilação nessa parte do código da Webcam >>
procedure TForm1.Camera ((Sender: TObject);
begin
if hWndC <> 0 then exit;
hWndC := capCreateCaptureWindowA('WebCam no Turbo Delphi',WS_CHILD or WS_VISIBLE // << Linha que marca como erro ,Panel1.Left,Panel1.Top,320,240,Form1.Handle,0);
O erro é esse >>
[Error] Unit1.pas(509): Left side cannot be assigned to
Isso tem jeito de concertar eu eu serei obrigado abrir de mão do código da Cam?
Aguardo retorno.
GOSTEI 0
Claudia Nogueira
13/10/2012
Isso "hWndC" é uma variável ou uma constant? Por que essa mensagem quer dizer que não é possível atribuir um valor.
GOSTEI 0
Vtrx
13/10/2012
Aqui funcionou.
Verifique se existe erro de sintase;
Não esqueça que a rotina que postou do serial não está comparando ela.
Voce deve definir em;
Defina o numero serial que voce quer liberar o seu programa.
Verifique se existe erro de sintase;
hWndC := capCreateCaptureWindowA('WebCam no Turbo Delphi',WS_CHILD or WS_VISIBLE,Panel1.Left,Panel1.Top,320,240,Form1.Handle,0);Não esqueça que a rotina que postou do serial não está comparando ela.
Voce deve definir em;
Const DISCO = '123456';
Defina o numero serial que voce quer liberar o seu programa.
GOSTEI 0
Luiz Eduardo
13/10/2012
Isso "hWndC" é uma variável ou uma constant? Por que essa mensagem quer dizer que não é possível atribuir um valor.
Isso "hWndC" é uma variável global >>
var hWndC : THandle = 0;
GOSTEI 0
Luiz Eduardo
13/10/2012
Isso "hWndC" é uma variável ou uma constant? Por que essa mensagem quer dizer que não é possível atribuir um valor.
Isso "hWndC" é uma variável global >>
var hWndC : THandle = 0;
PESSOAL JA RESOLVI AQUI!!! VALEU!
GOSTEI 0
Humberto Sa
13/10/2012
programo em cobol e preciso ler a numero de serie do hd para seguranca do sistema vc tem esta rotina
GOSTEI 0