CodeTyphon自带例子源码:限制运行日期
2015-11-18 21:23
931 查看
C:\codetyphon\CodeOcean\OnGuard\samples\exdys30
这个例子演示了直接在代码中写入超期日期。软件第一次运行时,生成ini文件并写入超期时间,例如2015-11-30,如果当前运行时间超过改时间,则提示并退出。
这个例子演示了直接在代码中写入超期日期。软件第一次运行时,生成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.
相关文章推荐
- ubuntu12.04下搭建android开发环境
- 数据库与MATLAB链接http://blog.sina.com.cn/s/blog_9d0b00a401012spy.html
- 如何增大UDP收包效率
- MongoDB 启动mongo不带DB
- c++ dirname() basename()
- 异常分类
- IntelliJ IDEA快捷键note
- 线程锁ReentrantLock和Condition的使用
- 反射的方法操作记事本添加插件
- 【FOJ2207 11月月赛C】【DFS栈性质应用 离线处理】以撒的结合 从x到y路径上的第k个点 询问众多
- Android 拖拉控件遇到的问题
- 90 Subsets II
- Poj 1734 Sightseeing trip floyd最小环
- Elasticsearch DSL中Query与Filter的不同
- abstract 与 interface
- WebRTC汇总
- 没有躲过的坑--正确释放vector的内存
- 没有躲过的坑--正确释放vector的内存
- 51nod 1247 可能的路径 (最大公约数变形)
- c#中数据库操作