Fonte: www.activedelphi.com.br
Apresentarei aqui uma técnica que utiliza o serial lógico de uma unidade de disco do computador, que apesar de poder ser modificada após uma formatação, por exemplo, já é um bom começo!
Bom, vamos lá. Tendo em vista a preocupação dos colegas com pirataria e cópias ilegais, desenvolvi um código que verifica o número de série de um determinado dispositivo conectado ao computador e faz uma comparação.
Abaixo há uma função que pega o número de serie do CD que esta na respectiva unidade. O sistema só irá rodar se aquele determinado CD estiver no drive. Tanto faz se vc colocar o CD na unidade D, E ou F, a função irá verificar cada unidade a procura do número de serie correto e caso não o ache retorna false. Apesar da idéia ser criada com base em um CD, pode ser adaptada para o uso com HD's.
Para testar o código, você precisará acrescenta rum label e um button em seu form. Em seguida, implementar a funçãotbVolSerial, a procedure VerificalSerialH e o evento onClick do botão, conforme abaixo:
Bom, vamos lá. Tendo em vista a preocupação dos colegas com pirataria e cópias ilegais, desenvolvi um código que verifica o número de série de um determinado dispositivo conectado ao computador e faz uma comparação.
Abaixo há uma função que pega o número de serie do CD que esta na respectiva unidade. O sistema só irá rodar se aquele determinado CD estiver no drive. Tanto faz se vc colocar o CD na unidade D, E ou F, a função irá verificar cada unidade a procura do número de serie correto e caso não o ache retorna false. Apesar da idéia ser criada com base em um CD, pode ser adaptada para o uso com HD's.
Para testar o código, você precisará acrescenta rum label e um button em seu form. Em seguida, implementar a funçãotbVolSerial, a procedure VerificalSerialH e o evento onClick do botão, conforme abaixo:
// função que pega o numero serial do dispositivo function Tform2.tbVolSerial(const Drive: Char; Path: PChar): Cardinal; var MaxCompLen, FileSysFlag, PrevErrorMode: Cardinal; begin if Path = nil then Path := PChar(Drive + ':'); PrevErrorMode := SetErrorMode(SEM_FAILCRITICALERRORS); try if not GetVolumeInformation(PChar(Path), nil, 0, @Result, MaxCompLen, FileSysFlag, nil, 0) then Result := 0; finally SetErrorMode(PrevErrorMode); end; end; //Esta função faz a varredura em todos os dispositivos a //procura do serial valido. retorna true ou false. procedure Tform2.VerificaSerialH(Driver: char); const drive: array[0..25] of char = ( 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'w', 'v', 'x', 'y', 'z'); var j: integer; ini: TIniFile; SerialHardware, AdquireSerial: string; erro: Boolean; begin if not FileExists('.serial.ini') then begin AdquireSerial := IntToStr(tbVolSerial(Driver, nil)); ini := TIniFile.Create('.serial.ini'); ini.WriteString('serial', 'Hardware', AdquireSerial); ini.Free; end else begin ini := TIniFile.Create('.serial.ini'); SerialHardware := ini.ReadString('serial', 'Hardware', ''); ini.free; end; for j := 0 to 25 do begin if (IntToStr(tbVolSerial(Drive[j], nil))) = SerialHardware then begin Erro := false; Label1.Caption := 'Original'; break; end else Erro := true; end; if Erro then Label1.Caption := 'Pirata' end; procedure Tform2.Button1Click(Sender: TObject); begin Label1.Caption := 'Este sistema é...'; Label1.Repaint; VerificaSerialH('G'); end;
Nenhum comentário:
Postar um comentário