熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

Delphi程序的時限和加密方法

2013-11-11 21:04:02  來源: Delphi編程 

  本例中TRegistry是關鍵類Delphi 不能自行加入需在uses部分手工加入registry通過其方法ReadStringWriteString來讀出和寫入字符亦可通過其方法ReadDateWriteDate來讀出和寫入日期

  程序第一次運行就寫入其運行時間應用期限為超過天就不再運行全局變量NoRegistrySpareDays來分別判斷是否注冊和剩余期限自定義函數Encrypt為用戶名到

  密碼的變換函數

  程序啟動時通過搜索注冊表判斷是否第一次運行和是否注冊來確定程序是否運行

  procedure TFormFormCreate(Sender: TObject);
  var
   Reg:Tregistry;
  KeyNameTempCodeTempNameTempStr:string;
   Same:Integer;
   FirstDateNowDate:Tdatetime;
   NumberOfDays:real;
  begin
   NoRegistry:=true;
  NowDate:=date; //取得運行時系統日期
  try
  //創建注冊表有該鍵則讀取無則創建
   Reg:=TregistryCreate ;
   RegRootKey :=hkey_local_machine;
   KeyName:=Softwarejsjbxample;
   if RegOpenKey(KeyNametrue) then
   begin
   TempName:=RegReadString(UsrName);
   TempCode:=RegReadString(Passwd);
  //讀取用戶名注冊號
   try
   FirstDate:=RegReadDate(Date);
  //非第一次則讀入第一次運行時間
   except
   RegWriteDate(DateNowDate);
  // 若為第一次運行則寫入系統日期
   FirstDate:=NowDate;
   end;
   end ;
   regCloseKey ;
   finally
   regFree ;
   end;
   TempStr:=Encrypt(TempName);
  //通過自定義函數Encrypt()來獲取密碼
   Same:=CompareText(TempStrTempCode);
  //比較密碼
   if TempName<> then
   if Same= then
   NoRegistry:=false;
  //驗證密碼通過NoRegistry為false
   if NoRegistry then
   begin //若未注冊
  NumberOfDays:=NowdateFirstDate;
  SpareDays:=round(NumberOfDays);
  LabelCaption :=FloatToStr(SpareDays);
  if((NumberOfDays>) or (NumberOfDays<)) then
  begin
  showmessage(程序未注冊超過試用期或更改系統時間將終止運行!);
  applicationTerminate;//超過則禁止運行
  end;
  end;
  end;

  注冊過程其響應入口可放於About

  procedure TAboutButtonClick(Sender: TObject);
  var
   InptNameInptCodeRealCode: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(RealCodeInptCode);
   if (Same<>) then
  showmessage(注冊號碼不對注冊未成功!)
   else
   begin
   //密碼匹配時做把用戶名密碼寫入注冊表
   Try
  Reg:=TregistryCreate ;
  RegRootKey :=hkey_local_machine;
  KeyName:=Softwarejsjbxample;
  if RegOpenKey(KeyNametrue) then
   begin
  RegWriteString(PasswdInptCode);
  RegWriteString(UsrNameInptName);
   end;
   regCloseKey ;
   finally
   RegFree ;
   end;
   NoRegistry:=false;
  //可修改注冊後的界面
   end;
   end;
   end;
  end;

    密碼的變換函數此變換函數可由讀者自由發揮在此僅示一例而已

  Function TFormEncrypt(TempStr:string):string;
  Var
   Str:String;
   ij:Integer;
  Begin
   Str:=;
   For i:= to Length(TempStr) do
   begin
   j:=(i?i?i?i mod (i+))+(i?i mod (i+))+i?+;
   Str:=Str+chr(ord(TempStr[i])+j);
   j:=(i?i?i?i mod (i+))+(i?i mod (i+))+i?+;
   Str:=Str+chr(ord(TempStr[i])+j);
   End;
   Result:=Str;
  end;

    此程序在WindowsDelphi 下調試通過


From:http://tw.wingwit.com/Article/program/Delphi/201311/8395.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.