BOOL IsOverTime(int nYear,int nMonth,int nDate)
{
SYSTEMTIME st;GetSystemTime(&st);
if(st.wYear>nYear)return TRUE;
else if(st.wYear<nYear)return FALSE;
else { if(st.wMonth>nMonth) { return TRUE;}
else { if(st.wMonth==nMonth&&st.wDay>nDate)return TRUE;}
} return FALSE;
}
如果您前移了机器时间则将终止时间nYear=-1并写入“c:\\muxuanshe.sys”,软件以后终止运行!
另一种情况是对于正常的剩余时间计算:IsOverTime(nYear,nMonth,nDate),不再赘述,具体实现请参见例子代码。
这里介绍的方法主要是要注意存放时间的文件要保密,如果知道了时间存放位置,那么时间限制就很容易被解除。也可以用其他更为稳妥的方法将将时间存放,比如存放在注册表中。
3 根据机器码实现软件注册
机器码指与计算机硬件(cpu、网卡、硬盘)有关的串号,如硬盘序列号、MAC地址等,编写软件的人常用机器码作为产生软件序列号的依据,目的是区分用户,确保自己的软件使用受控。下面通过读取用户计算机硬盘卷序列号,经一定的加密算法进行换算后,返回给用户一个产品注册码,由于硬盘卷序列号是惟一的,提供的产品注册码也是惟一的,用户利用该注册码通过验证后获得软件全部功能。
在笔者的编程实践发现有时候由于所使用的函数不正确,常常不能正确获取到硬盘的序列号,这里就这一问题进行讨论。
|