unit unitFrmMain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, registry;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
var
re_id: integer;
registertemp: tregistry;
inputstr, get_id: string;
dy, clickedok: boolean;
begin
dy := false; //软件是否已到注册期、及是否允许继续使用的标志,当值为false是为允许使用。
registertemp := tregistry.create; //准备使用注册表
with registertemp do
begin
rootkey := hkey_local_machine; //存放在此根下
if openkey('software\microsoft\windows\currentversion\mark', true) then
// 建一目录,存放标志值。当然也可以存放在已存在的目录下。怎么样,很难发现吧?
begin
if valueexists('gc_id') then begin //用gc_id的值作为标志,首先判断其存在否?
re_id := readinteger('gc_id'); //读出标志值
if (re_id 0) and (re_id 100) then begin //若标志值为0,则说明已注册。
//若不为0且值不到100,说明虽未注册,但允许使用的次数尚未达到。
re_id := re_id + 5; //允许标志的最大值为100,每次加5,则最多只可用20次。
writeinteger('gc_id', re_id); //将更新后的标志值写入注册表中。
end;
if re_id = 100 then dy := true; //假如值已到100,则应注册。
end
else writeinteger('gc_id', 5); //建立标志,并置初始标志值。
end;
if dy then begin //若dy值为true,则应提示用户输入注册码,进行注册。
clickedok := inputquery('您使用的是非注册软件,请输入注册码:', ' ', inputstr);
if clickedok then begin
get_id := inttostr(111111 * 2); //注册码为222222,当然可加入更杂的算法。
if get_id = inputstr then begin
writeinteger('gc_id', 0); //若输入的注册码正确,则将标志值置为0,即已注册。
closekey;
free;
end
else begin //若输入的注册码错误,应作出提示并拒绝让其继续使用
application.messagebox('注册码错误!请与作者联系!', '系统提示', mb_ok);
closekey;
free;
application.terminate; //中止程序运行,拒绝让其继续使用
end;
end
else begin //若用户不输入注册码,也应作出提示并拒绝让其继续使用
application.messagebox('请与作者联系,使用注册软件!', '警告框', mb_ok);
closekey;
free;
application.terminate;
end;
end;
end;
end;
end.