要实现软件使用时间的限制,需要设计几个时间 ,比如,系统的开启时间,系统上次的关机时间,取网络的时间(北京时间),本课主要从几个方面实现这些功能,封装成模块
思路
1、软件首次启动把试用到期时间写人本地或者注册表
2、对这个文件隐藏,加密,路径
3、每次关闭软件时把退出的时间写入本地文件
4、每次启动软件时读取上次退出时的时间
5、用软件启动时的时间个上次退出的时间比较
6、如果启动时间比上次退出时间还早,那就是修改了系统时间
7、启动时间、退出时间最好使用网络时间
8、那么如果客户端断网
9、只能和Windows上次关机和本次开机时间比较
各系统时间基准
DOS的时间基准是1980年1月1日,
Unix的时间基准是1970年1月1日上午12 点,
Linux的时间基准是1970年1月1日凌晨0点。
Windows的时间基准是1601年1月1日。
里面存储时间的格式为一个17位的整数,
从1601年1月1日开始计算,
显示出到现在为止所经历过的微秒数,
例如2013年4月28日10:15就表示为13011588908548139
1s=1000ms=1000000微秒
部分教程源码:
.版本 2 .支持库 shell .支持库 spec .支持库 internet .程序集 窗口程序集_启动窗口 .子程序 _按钮1_被单击 执行 (#打开文件, 取特定目录 (9) + “Tasks\SCHEDLGU.TXT”, , , ) .子程序 _按钮2_被单击 调试输出 (取DOS返回 (“systeminfo”)) .子程序 _按钮3_被单击, , , net statistics WORKSTATION 调试输出 (取DOS返回 (“net statistics WORKSTATION”)) .子程序 _按钮4_被单击, , , 取本机开机时间 调试输出 (取本机开机时间 ()) .子程序 取本机开机时间, 日期时间型, 公开 返回 (增减时间 (取现行时间 (), #秒, -取启动时间 () ÷ 1000)) .子程序 取上次关机时间, 日期时间型, 公开 .局部变量 reg_z, 字节集 .局部变量 Term, 长整数型 .局部变量 Time, 长整数型 .局部变量 Ret, 日期时间型 reg_z = 取字节集注册项 (#本地机器, “SYSTEM\CurrentControlSet\Control\Windows\ShutdownTime”, ) Term = 取字节集数据 (reg_z, #长整数型, ) Term = Term ÷ 10000000 Time = Term ÷ 86400 Ret = 增减时间 (指定时间 (1601, 1, 1, , , ), #日, Time) Ret = 增减时间 (Ret, #秒, Term - Time × 86400) Ret = 增减时间 (Ret, #小时, 8) 返回 (Ret) .子程序 _按钮5_被单击 调试输出 (取上次关机时间 ()) .子程序 时间_北京时间_网络, 日期时间型, , 返回 “100年1月1号” 说明失败,没有联网 .局部变量 temp, 文本型 .局部变量 现行时间, 日期时间型 .局部变量 返回数据, 文本型, , "0" temp = 到文本 (HTTP读文件 (“http://cgi.im.qq.com/cgi-bin/cgi_svrtime”)) .如果 (temp ≠ “”) temp = 子文本替换 (temp, “:”, “-”, , , 真) temp = 子文本替换 (temp, “ ”, “-”, , , 真) 返回数据 = 分割文本 (temp, “-”, ) 现行时间 = 指定时间 (到整数 (返回数据 [1]), 到整数 (返回数据 [2]), 到整数 (返回数据 [3]), 到整数 (返回数据 [4]), 到整数 (返回数据 [5]), 到整数 (返回数据 [6])) .否则 现行时间 = 到时间 (“100年1月1号”) .如果结束 返回 (现行时间) .子程序 _按钮6_被单击, , , 时间_取北京时间 调试输出 (时间_北京时间_网络 ())