在Delphi程序中实现时间限制和加密
点击次数:51 次 发布日期:2008-11-09 08:41:41 作者:源代码网
|
源代码网推荐 源代码网推荐 程序第一次运行就写入其运行时间,应用期限为30天,超过30天就不再运行。全局变量NoRegistry、SpareDays来分别判断是否注册和剩余期限,自定义函数Encrypt为用户名到密码的变换函数。 源代码网推荐 源代码网推荐 一、程序启动时,通过搜索注册表,判断是否第一次运行和是否注册,来确定程序是否运行。 源代码网推荐 procedure TForm1.FormCreate(Sender: TObject); 源代码网推荐 var 源代码网推荐 源代码网推荐 Reg:Tregistry; 源代码网推荐 源代码网推荐 KeyName,TempCode,TempName,TempStr:string; 源代码网推荐 源代码网推荐 Same:Integer; 源代码网推荐 源代码网推荐 FirstDate,NowDate:Tdatetime; 源代码网推荐 源代码网推荐 NumberOfDays:real; 源代码网推荐 源代码网推荐 begin 源代码网推荐 源代码网推荐 NoRegistry:=true; 源代码网推荐 源代码网推荐 NowDate:=date; //取得运行时系统日期 源代码网推荐 源代码网推荐 try 源代码网推荐 源代码网推荐 //创建注册表,有该键则读取,无则创建 源代码网推荐 源代码网推荐 Reg:=Tregistry.Create ; 源代码网推荐 源代码网推荐 Reg.RootKey :=hkey_local_machine; 源代码网推荐 源代码网推荐 KeyName:="SoftwarejsjbExample"; 软件开发网 www.mscto.com 源代码网推荐 源代码网推荐 if Reg.OpenKey(KeyName,true) then 源代码网推荐 源代码网推荐 begin 源代码网推荐 源代码网推荐 TempName:=Reg.ReadString("UsrName"); 源代码网推荐 源代码网推荐 TempCode:=Reg.ReadString("Passwd"); 源代码网推荐 源代码网推荐 //读取用户名,注册号 源代码网推荐 源代码网推荐 try 源代码网推荐 源代码网推荐 FirstDate:=Reg.ReadDate("Date"); 源代码网推荐 源代码网推荐 //非第一次则读入第一次运行时间 源代码网推荐 源代码网推荐 except 源代码网推荐 源代码网推荐 Reg.WriteDate("Date",NowDate); 源代码网推荐 源代码网推荐 // 若为第一次运行,则写入系统日期 源代码网推荐 源代码网推荐 FirstDate:=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(31-NumberOfDays); 源代码网推荐 源代码网推荐 Label1.Caption :=FloatToStr(SpareDays); 源代码网推荐 源代码网推荐 if((NumberOfDays>31) or (NumberOfDays<-1)) then 源代码网推荐 源代码网推荐 begin 源代码网推荐 源代码网推荐 showmessage("程序未注册超过试用期或更改系统时间,将终止运行!"); 源代码网推荐 源代码网推荐 application.Terminate;//超过30天,则禁止运行 源代码网推荐 end; 源代码网推荐 源代码网推荐 end; 源代码网推荐 源代码网推荐 end; 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 二、注册过程,其响应入口可放于"About"内。 源代码网推荐 源代码网推荐 procedure TAbout.Button1Click(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:="SoftwarejsjbExample"; 源代码网推荐 源代码网推荐 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; 源代码网推荐 源代码网推荐 源代码网推荐 三、密码的变换函数。此变换函数可由读者自由发挥,在此,仅示一例而已。 源代码网推荐 源代码网推荐 Function TForm1.Encrypt(TempStr:string):string; 源代码网推荐 源代码网推荐 Var 源代码网推荐 源代码网推荐 Str1:String; 源代码网推荐 源代码网推荐 i,j:Integer; 源代码网推荐 源代码网推荐 Begin 源代码网推荐 源代码网推荐 Str1:=""; 源代码网推荐 源代码网推荐 For i:=1 to Length(TempStr) do 源代码网推荐 源代码网推荐 begin 源代码网推荐 源代码网推荐 j:=(iiii mod (i 30)) (ii mod (i 20)) i3 1; 源代码网推荐 源代码网推荐 Str1:=Str1 chr(ord(TempStr[i]) j); 源代码网推荐 源代码网推荐 j:=(iiii mod (i 30)) (ii mod (i 20)) i3 1; 源代码网推荐 源代码网推荐 Str1:=Str1 chr(ord(TempStr[i]) j); 源代码网推荐 源代码网推荐 End; 源代码网推荐 源代码网推荐 Result:=Str1; 源代码网推荐 源代码网推荐 end; 源代码网推荐 源代码网供稿. |
