我想我的程序做成共享版(有時間限制),當用戶輸入注冊碼時,則無時間限制.要怎樣寫代碼呢?請各位大俠幫忙...

解决方案 »

  1.   

    Delphi程序的时限和加密方法本例中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;   此程序在Windows98,Delphi 4.0下调试通
      

  2.   

    TO:pandarus(雨季) 
       你是從程序員之家轉貼的吧,我之前也有試過,可是在windows98 delphi5.0編譯不過,有很多問題....
      請各位大俠再關注....
      

  3.   

    to: jabmoon
         能不能提供代碼參考.... TKS!
      

  4.   

    我在网上看到VB可心用硬盘序列号来控制,这该怎么做呢?
    UP关注!!