<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      Delphi程序的時限與加密方法

      [摘要]文/宋爽  本例中TRegistry是關鍵類,Delphi 4.0不能自行加入,需在uses部分手工加入“registry”,通過其方法“ReadString”和“WriteString”來讀出和寫...
      文/宋爽

        本例中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下調試通過。


      日韩精品一区二区三区高清