Fórum Serial HD #426131
13/10/2012
0
Vtrx
Curtir tópico
+ 1Post mais votado
15/10/2012
Deu algum erro??
Alisson Santos
Gostei + 1
Mais Posts
15/10/2012
Vtrx
Gostei + 1
17/10/2012
Vtrx
Capturar serial físico de HD IDE,SATA,SCSI para controle de Software.
Se alguem interessar pasoo o procedimento.
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!!
Gostei + 0
28/10/2012
Vtrx
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
28/10/2012
Vtrx
Gostei + 0
28/10/2012
Vtrx
Para Win 7,tem que executar como ADM(mouse direito).
Gostei + 0
29/10/2012
Luiz Eduardo
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
29/10/2012
Vtrx
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
29/10/2012
Vtrx
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
30/10/2012
Luiz Eduardo
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
30/10/2012
Claudia Nogueira
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
30/10/2012
Luiz Eduardo
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
30/10/2012
Benedito Assis.
Segue seu exemplo, esta dando erro hardware não habilitado.
Gostei + 0
30/10/2012
Benedito Assis.
Estou confuso, executando não teria que dar o serial do hd.
Gostei + 0
30/10/2012
Luiz Eduardo
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
Clique aqui para fazer login e interagir na Comunidade :)
Inserção de url
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.