其他语言

位置:IT落伍者 >> 其他语言 >> 浏览文章

Delphi程序的时限和加密方法


发布日期:2020年11月25日
 
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 下调试通过

               

上一篇:Delphi调试断点无效的解决方法

下一篇:新手上路:Delphi接口笔记