|
当你辛辛苦苦用DELPHI做好了一个你认为十分不错的程序,你是否想把它发布出去成为共享软件呢? 做为一个共享软件,注册码肯定是少不了的,你可以通过判断程序是否注册来进行功能,时间或一些其它限制.现在就介绍一种简单的注册码制造方法.思路是这样的:程序运行时先检测注册表,如果找到注册项,则表明已经注册,如果没有找到注册项,则提示要求注册.LWJLinux联盟 LWJLinux联盟 <注册例程>LWJLinux联盟 LWJLinux联盟 在DELPHI下新建一工程,放置Edit1,Edit2,Label1,Label2,Button1组件.具体代码如下:LWJLinux联盟 LWJLinux联盟 unit Unit1;LWJLinux联盟 LWJLinux联盟 interfaceLWJLinux联盟 LWJLinux联盟 usesLWJLinux联盟 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,LWJLinux联盟 StdCtrls,Registry;//在此加上Registry以便调用注册表.LWJLinux联盟 LWJLinux联盟 typeLWJLinux联盟 TForm1 = class(Tform)LWJLinux联盟 Button1: Tbutton;LWJLinux联盟 Edit1: Tedit;LWJLinux联盟 Edit2: Tedit;LWJLinux联盟 Label1: Tlabel;LWJLinux联盟 Label2: Tlabel;LWJLinux联盟 procedure Button1Click(Sender: Tobject);LWJLinux联盟 procedure FormCreate(Sender: Tobject);LWJLinux联盟 privateLWJLinux联盟 Function Check():Boolean;LWJLinux联盟 Procedure CheckReg();LWJLinux联盟 Procedure CreateReg();LWJLinux联盟 { Private declarations }LWJLinux联盟 publicLWJLinux联盟 { Public declarations }LWJLinux联盟 end;LWJLinux联盟 LWJLinux联盟 varLWJLinux联盟 Form1: TForm1;LWJLinux联盟 Pname:string; //全局变量,存放用户名和注册码.LWJLinux联盟 Ppass:integer;LWJLinux联盟 LWJLinux联盟 implementationLWJLinux联盟 LWJLinux联盟 {$R *.DFM}LWJLinux联盟 LWJLinux联盟 Procedure TForm1.CreateReg();//创建用户信息.LWJLinux联盟 var Rego:Tregistry;LWJLinux联盟 beginLWJLinux联盟 Rego:=Tregistry.Create;LWJLinux联盟 Rego.RootKey:=HKEY_USERS;LWJLinux联盟 rego.OpenKey('.DEFAULT\Software\AngelSoft\Demo',True);//键名为AngelSoft\Demo,可自行修改.LWJLinux联盟 Rego.WriteString('Name',Pname);//写入用户名.LWJLinux联盟 Rego.WriteInteger('Pass',Ppass);//写入注册码.LWJLinux联盟 Rego.Free;LWJLinux联盟 ShowMessage('程序已经注册,谢谢!');LWJLinux联盟 CheckReg; //刷新.LWJLinux联盟 end;LWJLinux联盟 LWJLinux联盟 Procedure TForm1.CheckReg();//检查程序是否在注册表中注册.LWJLinux联盟 var Rego:Tregistry;LWJLinux联盟 beginLWJLinux联盟 Rego:=Tregistry.Create;LWJLinux联盟 Rego.RootKey:=HKEY_USERS;LWJLinux联盟 IF Rego.OpenKey('.DEFAULT\Software\AngelSoft\Demo',False) thenLWJLinux联盟 beginLWJLinux联盟 Form1.Caption:='软件已经注册';LWJLinux联盟 Button1.Enabled:=false;LWJLinux联盟 Label1.Caption:=rego.ReadString('Name');//读用户名.LWJLinux联盟 Label2.Caption:=IntToStr(Rego.ReadInteger('Pass')); //读注册码.LWJLinux联盟 rego.Free;LWJLinux联盟 endLWJLinux联盟 else Form1.Caption:='软件未注册,请注册';LWJLinux联盟 end;LWJLinux联盟 LWJLinux联盟 Function TForm1.Check():Boolean;//检查注册码是否正确.LWJLinux联盟 varLWJLinux联盟 Temp:pchar;LWJLinux联盟 Name:string;LWJLinux联盟 c:char;LWJLinux联盟 I,Long,Pass:integer;LWJLinux联盟 beginLWJLinux联盟 Pass:=0;LWJLinux联盟 Name:=edit1.Text;LWJLinux联盟 long:=length(Name);LWJLinux联盟 LWJLinux联盟 for I:=1 to Long doLWJLinux联盟 beginLWJLinux联盟 temp:=pchar(copy(Name,I,1));LWJLinux联盟 c:=temp^;LWJLinux联盟 Pass:=Pass+ord(c); //将用户名每个字符转换为ASCII码后相加.LWJLinux联盟 end;LWJLinux联盟 if StrToInt(Edit2.Text)=pass thenLWJLinux联盟 beginLWJLinux联盟 Result:=True;LWJLinux联盟 Pname:=Name;LWJLinux联盟 Ppass:=Pass;LWJLinux联盟 endLWJLinux联盟 else Result:=False;LWJLinux联盟 end;LWJLinux联盟 LWJLinux联盟 procedure TForm1.Button1Click(Sender: Tobject);LWJLinux联盟 beginLWJLinux联盟 if Check then CreateRegLWJLinux联盟 else ShowMessage('注册码不正确,无法注册');LWJLinux联盟 end;LWJLinux联盟 LWJLinux联盟 procedure TForm1.FormCreate(Sender: Tobject);LWJLinux联盟 beginLWJLinux联盟 CheckReg;LWJLinux联盟 end;LWJLinux联盟 LWJLinux联盟 end.LWJLinux联盟 LWJLinux联盟 LWJLinux联盟 <注册器>LWJLinux联盟 LWJLinux联盟 在DELPHI下新建一工程,放置Edit1,Edit2,Button1组件.具体代码如下:LWJLinux联盟 LWJLinux联盟 unit Unit1;LWJLinux联盟 LWJLinux联盟 interfaceLWJLinux联盟 LWJLinux联盟 usesLWJLinux联盟 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,LWJLinux联盟 StdCtrls;LWJLinux联盟 LWJLinux联盟 typeLWJLinux联盟 TForm1 = class(Tform)LWJLinux联盟 Button1: Tbutton;LWJLinux联盟 Edit1: Tedit;LWJLinux联盟 Edit2: Tedit;LWJLinux联盟 procedure Button1Click(Sender: Tobject);LWJLinux联盟 privateLWJLinux联盟 { Private declarations }LWJLinux联盟 publicLWJLinux联盟 { Public declarations }LWJLinux联盟 end;LWJLinux联盟 LWJLinux联盟 varLWJLinux联盟 Form1: TForm1;LWJLinux联盟 LWJLinux联盟 implementationLWJLinux联盟 LWJLinux联盟 {$R *.DFM}LWJLinux联盟 LWJLinux联盟 procedure TForm1.Button1Click(Sender: Tobject);LWJLinux联盟 varLWJLinux联盟 Temp:pchar;LWJLinux联盟 Name:string;LWJLinux联盟 c:char;LWJLinux联盟 I,Long,Pass:integer;LWJLinux联盟 beginLWJLinux联盟 Pass:=0;LWJLinux联盟 Name:=edit1.Text;LWJLinux联盟 long:=length(Name);LWJLinux联盟 LWJLinux联盟 for I:=1 to Long doLWJLinux联盟 beginLWJLinux联盟 temp:=pchar(copy(Name,I,1));LWJLinux联盟 c:=temp^;LWJLinux联盟 Pass:=Pass+ord(c);LWJLinux联盟 end;LWJLinux联盟 edit2.text:=IntToStr(pass);LWJLinux联盟 end;LWJLinux联盟 LWJLinux联盟 end.LWJLinux联盟 LWJLinux联盟 从<注册器>中取得注册码,便可在<注册例程>中进行注册.原理是使用ORD函数取得用户名每单个字符的ASCII码值,并进行相加得到注册码.LWJLinux联盟 当然,这十分容易并破解,你可以用XOR进行异或操作,或者倒取反值...具体的要看你怎么实现了.总之,本文章只抛砖引玉罢了.LWJLinux联盟
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论 |
|