开发软件如何限制试用天数(100分)

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

lidongshengly

Unregistered / Unconfirmed
GUEST, unregistred user!
请教各位高手,开发软件的时候如何限制试用天数,要达到就算用户更改系统时间而每过一天就自动减少试用天数一天的功能。
 
在注册表中加入信息,或者用配置文件记录...
 
如何加能否说的详细些,谢谢
 
这个方法有很多...
比如:可以在软件安装时候生成相应的注册表项目(如:当前时间和安装机器的硬件信息的混合运算值,并在此基础上进行加密运算(这样比较保险,难于破解)),然后每当软件运行时都修改以上创建的注册表项值以保证其为当前最新软件运行记录相关信息(主要是防止用户修改系统时间,使软件可以无限期使用);最后,每次软件启动时检测系统信息(主要是本机时间(假设用户未修改系统时间))是否超过试用期,如果没有提示还有几天可以试用,否则提示用户试用期超过;若用户修改了系统日期则可以通过与注册表项中当前值的比较结果得出修改日期结论,则也提示用户超过软件试用期限信息。
 
我不太明白在注册表中如何累加日期,它是通过什么方式计算程序两次运行之间的时间间隔。能否给个例子关于软件编辑注册表的,明白后马上给你加分,谢谢。
 
先留个e-mail,回来写个例程给你...
 
好的,12wo1998@163.com收到后给你100分,谢谢
 
我也要
xumeitian@163.com
谢谢
 
前段时间比较忙,所以没有来得及给楼主写例程,现在有些时间了,可不知楼主是否仍然需要这个例程还是已经自己解决了问题了。若楼主仍然需要该例程的话,请在此帖说明,我会继续把它写完然后Mail给你!
 
楼上的
俺也需要,能不能给俺发一份,收到后给你100分,
 
我也想要一份,谢谢了。
 
写到注册表中,不用天数,而用业务量来处理更合适一些,如果客户业务量很快就达到某个数量,就需注册,否则时间稍长一点.
 
dy:=false;
//软件是否已到注册期、及是否允许继续使用的标志,当值为FALSE是为允许使用。
registerTemp := TRegistry.Create;
//准备使用注册表
with registerTempdo
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;
 
這樣就行:
ini:=TIniFile.Create(GetWinSystemPath+'/mz.ini');
LastDate:=Now();
FirstDate:= ini.ReadDate('Date','FirstDate',Now());
if (FirstDate>LastDate) or (FirstDate>StrToDate('2006-11-30')) then
begin
Application.Terminate;
end
else
begin
ini.WriteDate('Date','FirstDate',Now());
ini.free;
end;
 
to Johnny_du
我还需要例子,麻烦你给发一个,谢谢
 
我写过一个注册的程序,请到盒子上下载
http://www.delphibox.com/article.asp?articleid=1799
 
这种程度的限制几秒钟就可以破了.
 
花了两个晚上做了一个 dll ,用于程序注册的
地址在 zzaiss.ik8.com/soft/Register.rar
注册机 zzaiss.ik8.com/soft/getRegSN.rar
注册时,对于申请到的序列号,只复制里面的日期和时间就行了,其它的不要,把复制的日期时间考到
注册机的输入申请到的注册号的文本框里,点到注册码就行了

该 dll 的导出函数名为:
function checkReg(handle:THandle;var Days:integer):integer;stdcall;
使用例子
// 用的是静态导入,也可以动态导入 loadLibrary
function checkReg(Handle:THandle;var Days:integer):integer;stdcall;external 'Dll/Register.dll';

使用
re := checkReg(application.Handle,Days);
if (re = 1) or (re = 2) then
begin
if re = 2 then
// 下面的可以换成你的,为的是改变标题栏
appConfig^.appName := appconfig^.appName+
' --- 未注册版本 还可以用 '+IntToStr(Days)+
' 天 ';
end else
begin
application.Terminate;
exit;
end;

返回值
1 -> 成功
2 -> 在使用期内
3 -> 程序被破坏
4 -> 取注册
5 -> 退出
===========
程序当时忘了做弹出注册的窗体了,只有在使用期后,才能弹出注册窗体
对一般的客户还可以,但对于破解的高手来说就很容易了
 
有问题可以来信
qijianzhou289@sohu.com
 
可以限制未注册程序运行的时间啦!每次启动如果是未注册的话5分钟后自己动关闭,你要不闲麻烦,又不想花钱的话,每5分钟自己开一次。呵呵!
 
后退
顶部