怎么样让程序在若干时候后过期不能运行啊?
就好像是什么试用版的一样。
简单些。

解决方案 »

  1.   

    本例中TRegistry是关键类,Delphi 4.0不能自行加入,需在uses部分手工加入“registry”,通过其方法“ReadString”
    和“WriteString”来读出和写入字符,亦可通过其方法“ReadDate”和“WriteDate”来读出和写入日期。程序第一次运行
    就写入其运行时间,应用期限为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:=’Softwarejsjbxample’;    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:=’Softwarejsjbxample’;  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:=(i?i?i?i mod (i+30))+(i?i mod (i+20))+i?3+1;   Str1:=Str1+chr(ord(TempStr[i])+j);   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;