1.变量定义
const
CKey : TKey =
( $A7,$33,$6B,$BF,$C8,$28,$86,$D2,$72,$EE,$D8,$36,$28,$69,$FC,$9B );
var
MachineKey : TKey;
MachineModifier : LongInt;
2.initialization部分做初始运算
MachineKey := CKey; //这里是一个random机器码
MachineModifier := ABS(CreateMachineID([midUser, midSystem, {midNetwork,} midDrives])); //这里通过登陆用户名、操作系统、硬盘序列号,创建一个修饰符,用于对机器码修饰
ApplyModifierToKeyPrim( MachineModifier , MachineKey , SizeOf(MachineKey) ); //这里就是用上一步生成的修饰符对机器码做进一步的运算,生成一个最终的机器码,仍然保存在MachineKey中。
3.计算注册码
var
AMachineKey:string;
ACode : TCode ;
ARelaseCode:string;
begin
AMachineKey:=BufferToHex(MachineKey,SizeOf(MachineKey));//这里将机器码转为字符串
InitSerialNumberCode( MachineKey , 1122334455 , 0 , ACode );//这里用机器码MachineKey对序列号1122334455进行加密(注意这个1122334455是你要发给软件使用人的序列号,可以是任意一个整形数,将来要用这个来注册软件的),得到一个最终的注册码
ARelaseCode := BufferToHex( ACode , SizeOf(ACode) ); //最终的注册码转为字符串,将来软件注册时就要对比用户填写的注册码是否与这个注册码相符,相符就说明注册成功,如果不成功,就是注册失败。
end;
4.如果注册成功的话,就要把这个注册码和序列号保存起来,我选用注册表保存:
with TRegIniFile.Create do
try
RootKey := HKEY_LOCAL_MACHINE ;
OpenKey( 'SOFTWARE\PRLSOFT', True ) ;
WriteString( 'RegInfo','SMS_SnRegCode', RelaseCode );
WriteInteger( 'RegInfo','SMS_SerialNumber', 1122334455);
finally
Free;
end;
5.在我们的软件中,就要从注册表中读取出这个注册码,然后与计算出来的注册码做对比,如果相等,就说明软件已经注册,如果失败,就说明软件未注册,我们可以做一些限制
const
CKey : TKey =
( $A7,$33,$6B,$BF,$C8,$28,$86,$D2,$72,$EE,$D8,$36,$28,$69,$FC,$9B );
var
MachineKey : TKey;
MachineModifier : LongInt;
AMachineKey:string;
ACode : TCode ;
ARelaseCode:string;
AMyRelaseCode:string;
ASerialNumber:Integer;
{$R *.res}
begin
MachineKey := CKey; //这里是一个random机器码
MachineModifier := ABS(CreateMachineID([midUser, midSystem, {midNetwork,} midDrives])); //这里通过登陆用户名、操作系统、硬盘序列号,创建一个修饰符,用于对机器码修饰
ApplyModifierToKeyPrim( MachineModifier , MachineKey , SizeOf(MachineKey) ); //这里就是用上一步生成的修饰符对机器码做进一步的运算,生成一个最终的机器码,仍然保存在MachineKey中。
with TRegIniFile.Create do
try
RootKey := HKEY_LOCAL_MACHINE ;
OpenKey( 'SOFTWARE\PRLSOFT',False );
AMyRelaseCode := ReadString( 'RegInfo' , 'SMS_SnRegCode' ,'' );
ASerialNumber := ReadInteger( 'RegInfo', 'SMS_SerialNumber',0);
finally
Free;
end;
MachineKey := CKey;
MachineModifier := ABS(CreateMachineID([midUser, midSystem, {midNetwork,} midDrives]));
ApplyModifierToKeyPrim( MachineModifier , MachineKey , SizeOf(MachineKey) );
AMachineKey:=BufferToHex(MachineKey,SizeOf(MachineKey));
InitSerialNumberCode( MachineKey , ASerialNumber , 0 , ACode );
ARelaseCode := BufferToHex( ACode , SizeOf(ACode) );
if ARelaseCode = AMyRelaseCode then //已经注册成功
ShowMessage('已经注册成功')
else
begin //未注册
ShowMessage('未注册');
Exit;
end ;
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.Title := '无线助理标准版';
Application.CreateForm(TDM, DM);
...
Application.Run;
end.