设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 5355|回复: 17
打印 上一主题 下一主题

[API] 第一个API作品——未注册版试用功能的实现

[复制链接]
跳转到指定楼层
1#
发表于 2011-9-24 21:59:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
       看来这套软件也花去你几个月的时间了吧,这几个月以来,总有些代码你是不愿公布,或是软件版权你希望保留,有的客户不想用正式版,也许你想过不卖给他,但是你不敢。哈,又或者你觉得试用功能不好实现,其实写一个试用版软件,很容易。我有个朋友,他的代码处理得非常好,不过最近生活有点困难,只要你随便给他几段代码,他一定可以帮你让那些试用版用户郁闷不已,你尽管考虑一下。不过要快哦。

        ——这段话是不是有些熟悉?没错,这是Roy版《东邪西毒》。{:soso_e128:} 不过,前面提到的也是实情,试用版的功能实现起来还是有些难度的。通常这三种思考方向:限制机器码、限制次数和限制天数。
       不过前面两种有其局限性,例如,如果只限制机器码,而客户只想用试用版,我们大概只能由他去了,这时他甚至可以把软件拷贝到其它机器上用;而限制次数的不足,首先在于体验期的缩短(如果一天死机几次,会不会影响工作心情呢?{:soso_e144:} ),其次,降低了Bug的出现几率,不利于软件的后期维护。
      而限制天数则没有前面两种的缺陷,到期了自动退出,无法进入启动界面(试用版都不能用了);体验期固定在动态的日期段里,自然不会因为次数而缩短了。
      说了这么多,Roy也口干了,先喝杯{:soso_e160:}。
      传个附件, ,2L再继续。      
      

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

本帖被以下淘专辑推荐:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享分享 分享淘帖1 订阅订阅
2#
 楼主| 发表于 2011-9-25 02:35:04 | 只看该作者
本帖最后由 roych 于 2011-9-25 02:35 编辑

       刚刚网络好了,回头一看,附件还没上传,已经查看19次了,MD,{:soso__15062419931964187282_1:} 看来Roy又得背上忽悠人的罪名,罪过罪过。
       闲话少说,现在开始说说实现的原理。
       1、第一次运行时,记录下开始时间和结束时间。——这个时间是真实的时间,或者说是可以作为参考的时间。
       2、以后每次运行,则获取当前时间,和上一次结束时间进行对比。如果前者早于后者,说明有人在系统时间上做了手脚,自动退出。如果没有早于后者,则视为真实时间(如果用户把时间推前,那没办法,自个减少试用期)。
       3、把开始时间加上试用天数,作为动态的试用期,与真实时间作对比,真实时间在试用期内则可以使用,否则自动退出。
      
       从这里可以看出,第一步的时间记录很重要,无论是开始时间和结束时间,都是以后参考的标准。原理搞清楚之后,那么接下来就是代码问题了。
       有了上面的思路,我们还可以考虑建立一个表,用于存储这些数据。每次运行就打开记录集,判断更新数据并比较,确定是否在试用期内。——做起来并不难,不过同样需要两三个字段。——有兴趣的朋友可以试试。
3#
 楼主| 发表于 2011-9-25 02:36:00 | 只看该作者
本帖最后由 roych 于 2011-9-25 02:37 编辑

      不过,如果出于对安全要求更高的话,则可以写入注册表(特别是HKEY_CLASS_ROOT或者其它较少用的键里,即便用户能想到在注册表里找,想找到也挺费时间的),详细请参考附件,里面大多都有注释,这里不打算细说。相反,我想提一下的是下面这段代码:

  1. Private Sub Form_Load()
  2. Dim a As Long
  3. a = GetSetting("MyApp", "set", "day", 0)
  4. If a = 10 Then
  5. MsgBox "试用期已过,请联系gfuuyygy!"
  6. Else
  7. MsgBox "现在剩下:" & 10 - a & "试用天数,好好珍惜!"
  8. if day(now)-a>0 then
  9. a = RemainDay + 1
  10. SaveSetting "MyApp", "set", "times", a
  11. End if
  12. End if
  13. End Sub
复制代码
之所以提这段代码,是因为它曾经很盛行,可能影响过不少人,以致现在时不时有人还在问GetSetting或者SaveSetting是干吗用的。这两个函数其实就是把获取或保存注册表位置:HKEY_CURRENT_USER\VB and VBA Program Settings的数据。从思路上看,这段代码似乎没多大问题,而事实是不是这样就能达到限制试用天数的功能了呢?事实上Roy开始学习代码,也没怀疑过这段代码,不过调整系统日期测试后,一下子成了“茫然哥”{:soso__10328103393431676979_4:} ,这次算是公报私仇吧。

       很明显这是断章取义的一段代码。首先没有定义day键,也没有定义RemainDay。因此每次运行a都成了0,直接执行下一步得到a=1,无法累计天数。事实上,前面也说了,单纯一个键值是不可能得出正确判断的。因此这里同样也需要建立初始日期的键值和结束日期的键值。

       至于真正代码该怎么写,如果大家有兴趣的话,可以参考下附件的思路来完成,算是家庭作业吧。不过对于这些众所周知的位置,安全性自然不算太好,这是理所当然的。
      

点击这里给我发消息

4#
发表于 2011-9-25 11:08:51 | 只看该作者
坐个沙发,谢谢分享!

点击这里给我发消息

5#
发表于 2011-9-25 13:50:21 | 只看该作者
我之前的USER ACCESS ADMIN的注册机制就是放在注册表中的,现在好多安全程序都是监控注册表修改的,所以这个很难弄

点击这里给我发消息

6#
发表于 2011-9-25 13:51:05 | 只看该作者
这个问题道高一尺魔高一丈,后来我的精力就不放到这个上面了
7#
 楼主| 发表于 2011-9-25 21:42:48 | 只看该作者
zhengjialon 发表于 2011-9-25 13:51
这个问题道高一尺魔高一丈,后来我的精力就不放到这个上面了

作为开发人员,也深知这种矛与盾的关系,所作的努力大多是防君子不防小人的,只不过希望通过提高破解的门槛以达到保护版权的目的而已。
8#
发表于 2011-9-26 07:42:04 | 只看该作者
谢谢分享!

点击这里给我发消息

9#
发表于 2015-1-12 15:43:31 | 只看该作者
roych 发表于 2011-9-25 21:42
作为开发人员,也深知这种矛与盾的关系,所作的努力大多是防君子不防小人的,只不过希望通过提高破解的门 ...

高人 就是高人 学习了
10#
发表于 2015-1-13 11:39:17 | 只看该作者
looooooooooook
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-6 03:32 , Processed in 0.107817 second(s), 37 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表