给你个demo,自已修改//有关时间限制使用和软件注册的设计!procedure Tgcdzsys_grjs.FormCreate(Sender: TObject); var Reg:Tregistry; //自定义注册表变量 NowDate,FirstDate:TDateTime;//自定义时间变量 KeyName,TempCode,TempName,TempStr:string; //自定义字符串变量 Same:Integer; //自定义整数变量 NumberOfDays:Real; begin //SB.Panels[0].Text:=' 工程地质勘察应用系统'; //SB.Panels[1].Text:=' Email: [email protected] 或 [email protected]'; NoRegistry:=true; NowDate:=date; //取得运行时系统日期 try //创建注册表,有该键则读取,无则创建 Reg:=Tregistry.Create ; Reg.RootKey :=Hkey_local_machine; KeyName:='Software\grjs\Example'; if Reg.OpenKey(KeyName,true) then begin TempName:=Reg.ReadString('UsrName'); TempCode:=Reg.ReadString('Passwd'); //读取用户名,注册号 try FirstDate:=Reg.ReadDate('Date'); //非第一次则读入第一次运行时间 except FirstDate:=NowDate; Reg.WriteDate('Date',NowDate); //若为第一次运行,则写入系统日期 end; end; Reg.CloseKey; finally Reg.Free; end; TempStr:=Encrypt(TempName); //通过自定义函数Encrypt()来获取密码 Same:=CompareText(TempStr,TempCode); //比较密码 if TempName<>'' then if Same=0 then NoRegistry:=false; //验证密码,通过NoRegistry为false if NoRegistry then begin //若未注册... NumberOfDays:=Nowdate-FirstDate; SpareDays:=Round(10-NumberOfDays); ShowMessage('你已经剩下'+FloatToStr(SpareDays)+'天的使用时间了!请尽快注册!'); if((NumberOfDays>10) or (NumberOfDays<-1)) then begin ShowMessage('程序未注册超过试用期或更改系统时间,将终止运行!'); Application.Terminate;//超过10天,则禁止运行 end; end; end; function Tgcdzsys_grjs.Encrypt(TempStr:string):string; var Str1:String; i,j:Integer; begin Str1:=''; for i:=1 to Length(TempStr) do begin //密码匹配方式 j:=(i*i*i*i mod (i+30))+(i*i mod (i+20))+i*3+1; Str1:=Str1+chr(ord(TempStr[i])+j); end; Result:=Str1; end;procedure Tgcdzsys_grjs.DBBhelphgrjsClick(Sender: TObject); var InptName,InptCode,RealCode: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(RealCode,InptCode); if (Same<>0) then ShowMessage('注册号码不对,注册未成功!') else begin //密码匹配时做:把用户名、密码写入注册表 Try Reg:=Tregistry.Create ; //激发注册表 Reg.RootKey :=hkey_local_machine;//注册表路径 KeyName:='Software\grjs\Example';//创建新的注册文件 if Reg.OpenKey(KeyName,true) then begin Reg.WriteString('Passwd',InptCode); //注册密码 Reg.WriteString('UsrName',InptName);//注册用户名 end; Reg.CloseKey ; //关闭 finally Reg.Free; //释放注册表 end; NoRegistry:=false;//可修改注册后的界面 end; end; end; end;
ET99多功能USB KEY--只售9.9元
var
Reg:Tregistry; //自定义注册表变量
NowDate,FirstDate:TDateTime;//自定义时间变量
KeyName,TempCode,TempName,TempStr:string; //自定义字符串变量
Same:Integer; //自定义整数变量
NumberOfDays:Real;
begin
//SB.Panels[0].Text:=' 工程地质勘察应用系统';
//SB.Panels[1].Text:=' Email: [email protected] 或 [email protected]';
NoRegistry:=true;
NowDate:=date; //取得运行时系统日期
try
//创建注册表,有该键则读取,无则创建
Reg:=Tregistry.Create ;
Reg.RootKey :=Hkey_local_machine;
KeyName:='Software\grjs\Example';
if Reg.OpenKey(KeyName,true) then
begin
TempName:=Reg.ReadString('UsrName');
TempCode:=Reg.ReadString('Passwd');
//读取用户名,注册号
try
FirstDate:=Reg.ReadDate('Date');
//非第一次则读入第一次运行时间
except
FirstDate:=NowDate;
Reg.WriteDate('Date',NowDate);
//若为第一次运行,则写入系统日期
end;
end;
Reg.CloseKey;
finally
Reg.Free;
end;
TempStr:=Encrypt(TempName);
//通过自定义函数Encrypt()来获取密码
Same:=CompareText(TempStr,TempCode);
//比较密码
if TempName<>'' then
if Same=0 then
NoRegistry:=false;
//验证密码,通过NoRegistry为false
if NoRegistry then
begin //若未注册...
NumberOfDays:=Nowdate-FirstDate;
SpareDays:=Round(10-NumberOfDays);
ShowMessage('你已经剩下'+FloatToStr(SpareDays)+'天的使用时间了!请尽快注册!');
if((NumberOfDays>10) or (NumberOfDays<-1)) then
begin
ShowMessage('程序未注册超过试用期或更改系统时间,将终止运行!');
Application.Terminate;//超过10天,则禁止运行
end;
end;
end;
function Tgcdzsys_grjs.Encrypt(TempStr:string):string;
var
Str1:String;
i,j:Integer;
begin
Str1:='';
for i:=1 to Length(TempStr) do
begin //密码匹配方式
j:=(i*i*i*i mod (i+30))+(i*i mod (i+20))+i*3+1;
Str1:=Str1+chr(ord(TempStr[i])+j);
end;
Result:=Str1;
end;procedure Tgcdzsys_grjs.DBBhelphgrjsClick(Sender: TObject);
var
InptName,InptCode,RealCode: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(RealCode,InptCode);
if (Same<>0) then
ShowMessage('注册号码不对,注册未成功!')
else
begin
//密码匹配时做:把用户名、密码写入注册表
Try
Reg:=Tregistry.Create ; //激发注册表
Reg.RootKey :=hkey_local_machine;//注册表路径
KeyName:='Software\grjs\Example';//创建新的注册文件
if Reg.OpenKey(KeyName,true) then
begin
Reg.WriteString('Passwd',InptCode); //注册密码
Reg.WriteString('UsrName',InptName);//注册用户名
end;
Reg.CloseKey ; //关闭
finally
Reg.Free; //释放注册表
end;
NoRegistry:=false;//可修改注册后的界面
end;
end;
end;
end;
软件运行过程中,记录运行的时间,然后写入一个配置文件(这个配置文件要保护好),也不要计算什么天数,就计算运行小时吧,比如原来你打算给用户试用30天,那就改为30*2小时试用期吧,,一天2人小时试用,也OK了
搭建WEB服务器不是注册的好方法
在HOST里完全可以改成本地验证