本例中TRegistry是关键类Delphi 不能自行加入需在uses部分手工加入registry通过其方法ReadString和WriteString来读出和写入字符亦可通过其方法ReadDate和WriteDate来读出和写入日期
程序第一次运行就写入其运行时间应用期限为天超过天就不再运行全局变量NoRegistrySpareDays来分别判断是否注册和剩余期限自定义函数Encrypt为用户名到
密码的变换函数
一程序启动时通过搜索注册表判断是否第一次运行和是否注册来确定程序是否运行
procedure TFormFormCreate(Sender: TObject);
var
Reg:Tregistry;
KeyNameTempCodeTempNameTempStr:string;
Same:Integer;
FirstDateNowDate:Tdatetime;
NumberOfDays:real;
begin
NoRegistry:=true;
NowDate:=date; //取得运行时系统日期
try
//创建注册表有该键则读取无则创建
Reg:=TregistryCreate ;
RegRootKey :=hkey_local_machine;
KeyName:=Softwarejsjbxample;
if RegOpenKey(KeyNametrue) then
begin
TempName:=RegReadString(UsrName);
TempCode:=RegReadString(Passwd);
//读取用户名注册号
try
FirstDate:=RegReadDate(Date);
//非第一次则读入第一次运行时间
except
RegWriteDate(DateNowDate);
// 若为第一次运行则写入系统日期
FirstDate:=NowDate;
end;
end ;
regCloseKey ;
finally
regFree ;
end;
TempStr:=Encrypt(TempName);
//通过自定义函数Encrypt()来获取密码
Same:=CompareText(TempStrTempCode);
//比较密码
if TempName<> then
if Same= then
NoRegistry:=false;
//验证密码通过NoRegistry为false
if NoRegistry then
begin //若未注册
NumberOfDays:=NowdateFirstDate;
SpareDays:=round(NumberOfDays);
LabelCaption :=FloatToStr(SpareDays);
if((NumberOfDays>) or (NumberOfDays<)) then
begin
showmessage(程序未注册超过试用期或更改系统时间将终止运行!);
applicationTerminate;//超过天则禁止运行
end;
end;
end;
二注册过程其响应入口可放于About内
procedure TAboutButtonClick(Sender: TObject);
var
InptNameInptCodeRealCode:String;
Same:Integer;
Reg:Tregistry;
Keyname:String;
begin
if NoRegistry then //未注册时做
begin
RealCode:=;
InptName:= InputBox(注册 输入你的名字 );
if InptName<> then
begin
InptCode:= InputBox(注册 输入注册号 );
RealCode:=Encrypt(InptName);
Same:=CompareText(RealCodeInptCode);
if (Same<>) then
showmessage(注册号码不对注册未成功!)
else
begin
//密码匹配时做把用户名密码写入注册表
Try
Reg:=TregistryCreate ;
RegRootKey :=hkey_local_machine;
KeyName:=Softwarejsjbxample;
if RegOpenKey(KeyNametrue) then
begin
RegWriteString(PasswdInptCode);
RegWriteString(UsrNameInptName);
end;
regCloseKey ;
finally
RegFree ;
end;
NoRegistry:=false;
//可修改注册后的界面
end;
end;
end;
end;
三密码的变换函数此变换函数可由读者自由发挥在此仅示一例而已
Function TFormEncrypt(TempStr:string):string;
Var
Str:String;
ij:Integer;
Begin
Str:=;
For i:= to Length(TempStr) do
begin
j:=(i?i?i?i mod (i+))+(i?i mod (i+))+i?+;
Str:=Str+chr(ord(TempStr[i])+j);
j:=(i?i?i?i mod (i+))+(i?i mod (i+))+i?+;
Str:=Str+chr(ord(TempStr[i])+j);
End;
Result:=Str;
end;
此程序在WindowsDelphi 下调试通过