如何限制软件的使用期限?(200分)

  • 主题发起人 主题发起人 linger_0
  • 开始时间 开始时间
L

linger_0

Unregistered / Unconfirmed
GUEST, unregistred user!
请教高手如果想设置软件的使用期限该如何设置呢?
就是那种如果不注册可以免费使用一段时间,
但是超过期限软件就没有作用的共享效果。
有没有现成的软件可以直接完成这一过程呢?
 
自己记录下程序第一次运行的时间,注册表,ini,自定义文件,随便你怎么都行。

程序每次运行的时候检测。好像没有什么软件能完成这个。自己写吧。
 
无非就是在安装的机器作一个使用的标记,就是这个标记的存放位置,如前的的兄弟所说,
甚至可以放到网上去认证。
 
写一段注册的代码,给你一段现成的,你可以参考一下.

假设软件的主程序窗口为FORM1,则将该段代码置放在FORM1.CREATE事件中。代码如下:

procedure TForm1.form1create(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(27593758*2);//注册码为55187516,当然可加入更杂的算法。
      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;

 
看来也只有这样了。但防不了高手

 
将第一次使用的时间记录在注册表某隐秘的地方
然后每次使用都取其值与当前系统时间比较

不过如果别人改系统时间来使用则没办法了
也可以考虑对未注册版用限制使用次数或限制功能的方式
 
我这也有一段别人的程序,是加上30天的试用期的,希望对你有帮助

unit regApp;

interface

uses Windows,SysUtils,Registry,forms, Dialogs;

type
Tlogin = class
private
public
constructor Create; virtual;
procedure CheckLogin;
end;
implementation

constructor Tlogin.Create;
begin
inherited Create;
end;

procedure Tlogin.CheckLogin;
var
Reg_id: TDateTime;
RegisterTemp: TRegistry;
InputStr, Get_id: string;
Reg_tag, ClickDok: Boolean;
Allow: Integer;
begin
Allow := 30; //试用期为30天
Reg_tag := False; //软件是否到注册期
registerTemp := TRegistry.Create; //准备使用注册表
with registerTemp do
begin
RootKey := HKEY_LOCAL_MACHINE; //存放
if OpenKey('Software/Microsoft/Windows/CurrentSowft/tag', True) then // 建一目录,存放标志值
begin
if ValueExists('DateTag') then begin //用DateTag的值作为标志
Reg_id := ReadDate('DateTag'); //读出标志值
if (Reg_id <> 0) and (Now - Reg_id > Allow) then //允许使用的时间到
Reg_tag := True;
end
else
WriteDateTime('DateTag', Now); //建立标志,并置初始标志值。
end;
if Reg_tag then begin //要求用户输入注册码
ClickDok := InputQuery('您使用的是非注册软件,请输入注册码:', ' ', inputstr);
if ClickDok then begin
Get_id := IntToStr(2222); //注册码2
if Get_id = InputStr then begin
WriteDateTime('DateTag', 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.
 
softSENTRY

著名的 20/20 公司加密软件,能设置软件的使用时间限制、使用次数限制、
使用日期限制、给软件加密码等等,功能很强,是制作软件DEMO版软件的很
好的加密工具,加密的软件可根据每台不同的电脑给出不同的注册码
 
好像用install sheild做安装程序时可以用script语句实现
 
to yanyong:
你说的那个东东哪里能下载,弹出提示注册的窗体是不是出现他们公司的信息?
 
http://www.soft999.com/download1/sseval.zip
 
ASProtect

这个东西可以设定使用次数,使用时间,各种限制一应俱全。但是我没有它的注册码(注意
它也是个共享的东东),所以限制的程序总时不时弹一个讨厌的对话框,很烦。另外它还可
以将EXE文件加壳保护以及压缩大小,一级棒的东东。
 
請試用下面代碼,這是在大概情況,再根據自己的限期作處理
procedure TForm1.FormCreate(Sender: TObject);
var
FirstDate,NowDate:TDateTime;
NoReg:Boolean;
Reg:TRegistry;
begin
NowDate:=Date;
NoReg:=False;
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_LOCAL_MACHINE;
reg.CreateKey('/Software/ADate');
Try
Reg.readdate('Date')
Except
reg.writeDate('Date',NowDate);
FirstDate:=NowDate;
End;
Reg.closeKey;
end;
 
参考别人的,写自己的,
次数最好加一密,否则随意改为一就达不到效果了
 
个人认为还是用第三方控件,或者专门的注册程序比较好
自己写很麻烦
yanyong提供的那个就不错,带破解
 
如果用的是数据库软件,控制记录总条数是一个特别好的办法
 
自己记录下程序第一次运行的时间,随便找个SYSTEM目录或注册表深出写上你的时间,每次启动检查就行
 
可以每次与系统时间对比,如果系统时间比上次运行的时间还前,那无疑是客户修改
了系统时间,原则上你可以干掉他的啦!
另外,我通常是时间和次数混在一起用的,这样效果更好!
 
推荐用ASProtect
和Aspack 出自同一俄罗斯高手。可以说是世界一级棒的东西!1
我有它的注册码!
另外,如果要连内功的话,可以自己写一个哟!:)
可采用bios,注册表,以及硬盘扇区等等加密技术。
相信这一练下来,也成了加密高手了!!
 
后退
顶部