关闭

CodeTyphon自带例子源码:限制运行日期

标签: codetyphon32lazarus例子
496人阅读 评论(0) 收藏 举报
分类:


C:\codetyphon\CodeOcean\OnGuard\samples\exdys30

    这个例子演示了直接在代码中写入超期日期。软件第一次运行时,生成ini文件并写入超期时间,例如2015-11-30,如果当前运行时间超过改时间,则提示并退出。






{**********************************************************************
 CodeOcean
 Demo for Package pl_OnGuard.pkg
 This unit is part of CodeTyphon Project (http://www.pilotlogic.com/)
***********************************************************************}
(*
  This program uses the TOgDaysCode component. The first time the
  program is run, the necessary information is created and stored
  in an INI file. In addition, the program is given a "drop dead"
  date, i.e., regardless of how many days the program has been used,
  it cannont be used after that date (2014-12-31).

  NOTE:   *** This feature has now been disable in OnGuard ***
  InvalidCount is set to 3, user is allowed to 3 times break the rules,
  for example changing date back to execute program after trial period expired.
*)
unit Exdys30u;

interface

uses
  SysUtils, Classes, Controls,
  Forms, Dialogs,LResources, StdCtrls, Buttons,
  OnGuard,OgUtil,IniFiles;

const
  CKey : TKey = ($E5,$8F,$84,$D6,$92,$C9,$A4,$D8,
                 $1A,$FA,$6F,$8D,$AB,$FC,$DF,$B4);

type

  { TForm1 }

  TForm1 = class(TForm)
    Memo1: TMemo;
    CloseBtn: TBitBtn;
    OgDaysCode1: TOgDaysCode;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure OgDaysCode1GetKey(Sender: TObject; var Key: TKey);
    procedure OgDaysCode1GetCode(Sender: TObject; var Code: TCode);
    procedure OgDaysCode1ChangeCode(Sender: TObject; Code: TCode);
    procedure OgDaysCode1Checked(Sender: TObject; Status: TCodeStatus);
  private
    codeinvalid : Boolean;
  public
    { Public declarations }
    TheDir  : string;
    IniFile : TIniFile;
  end;

var
  Form1: TForm1;

implementation



{==========================================================================}

procedure TForm1.OgDaysCode1GetKey(Sender: TObject; var Key: TKey);
begin
  Key := CKey;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
    codeinvalid := false;
end;

{==========================================================================}

procedure TForm1.OgDaysCode1GetCode(Sender: TObject; var Code: TCode);
var
  S       : string;
  Expires : TDateTime;
  L       : integer;
begin
  {force the INI file to be in the same directory as the application}
  TheDir := ExtractFilePath(ParamStr(0));
  {
  L := Length(TheDir);
  if (L > 3) and (TheDir[L] <> '\') then
    TheDir := TheDir + '\';}

  {open Ini File}
  IniFile := TIniFile.Create(TheDir + 'Days30.INI');
  try
    {try to read release code}
    S := IniFile.ReadString('Codes', 'DaysCode', 'NoCode');

    {If default string returned, create code on the fly}
    if (S = 'NoCode') then begin
      { force absolute ("drop dead") expiration date of 2014-12-31 }
      Expires := EncodeDate(2015, 11, 30);
      InitDaysCode(CKey, 12, Expires, Code,3);

      {save string representation of release code to Ini File}
      S := BufferToHex(Code, SizeOf(Code));
      IniFile.WriteString('Codes', 'DaysCode', S);
    end else
      {convert retrieved string to a code}
      HexToBuffer(S, Code, SizeOf(Code));
  finally
    IniFile.Free;
  end;
end;

{==========================================================================}

procedure TForm1.OgDaysCode1ChangeCode(Sender: TObject; Code: TCode);
var
  S       : string;
begin
  if codeinvalid then
    Exit;
  IniFile := TIniFile.Create(TheDir + 'Days30.ini');
  try
    {convert Code to string for writing to INI file}
    S := BufferToHex(Code, SizeOf(Code));
    IniFile.WriteString('Codes', 'DaysCode', S);
  finally
    IniFile.Free;
  end;
end;

{==========================================================================}

procedure TForm1.OgDaysCode1Checked(Sender: TObject; Status: TCodeStatus);
var
  S : string;
begin
  case Status of
    ogValidCode    : begin
                       Label1.Caption := 'Days Remaining: '
                                       + IntToStr(OgDaysCode1.GetValue);
                       Exit;
                     end;

    ogInvalidCode  :
    begin
     S := 'Invalid Code';
     codeinvalid := true;
    end;

    ogDayCountUsed : S := 'Program used more than 30 days' + #13 +
                          'Please register NOW';

    ogCodeExpired  : S := 'Evaluation period expired' + #13 +
                          'Please register NOW';
  end;
  ShowMessage(S);
  Application.Terminate;
end;

initialization
{$i exdys30u.lrs}

end.



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:684228次
    • 积分:12335
    • 等级:
    • 排名:第1156名
    • 原创:162篇
    • 转载:156篇
    • 译文:157篇
    • 评论:162条
    最新评论