对于软件产品的试用版来说,限制软件使用是必不可少的。本文介绍如果限制使用时间。
假设软件A可以免费使用3个月,那么要确定的是开始使用时间,结束时间
1。确定开始使用时间。如下代码:
#include "windows.h" #include "stdio.h" int main(int argc, char* argv[]) { SYSTEMTIME currentTime; GetSystemTime(¤tTime); FILE *fp = fopen("out_date.h","w"); fprintf( fp, "#ifndef _OUT_DATA_H/n" "#define _OUT_DATA_H/n" "#define OUT_DATE _T(/"" "%4d %2d %2d/")/n" "#endif/n", currentTime.wYear, currentTime.wMonth, currentTime.wDay ); fclose(fp); return 0; }
上面的程序用于生成一个out_data.h的头文件,这文件里记录了编译的时间。假设这个程序叫做out_data.exe,那么对了VS工程来说,在工程的配置属性->生成事件->生成前事件->命令行中加out_data.exe。那么每次生成工程的时间就更新out_data.h文件(也即out_data.h里保存的时间都是最新的)。
2。计算使用的天数(从编译时间到现在的天数)。如下代码,GetOutDay返回天数。如果宏TESTING_VERSION_ON打开,则说明是测试版,不然就是正式版。一般情况下,具体工程要改动一下宏OutDayTest的定义。
//返回使用了的天数 int GetOutDay() { SYSTEMTIME currentTime={0},prevTime={0}; GetSystemTime(¤tTime); wchar_t *bT = OUT_DATE; char buildTime[10]; WideCharToMultiByte(CP_ACP,0,bT,-1,buildTime,16,NULL,NULL); char *time=buildTime+6;time[2]='/0'; prevTime.wDay=atoi(time); time-=2;time[2]='/0'; prevTime.wMonth=atoi(time); time-=4;time[4]='/0'; prevTime.wYear=atoi(time); double a,b; SystemTimeToVariantTime(&prevTime,&a); SystemTimeToVariantTime(¤tTime,&b); return (int)(b-a+1); } //是否已经过了试用期 extern int GetOutDay(); #if TESTING_VERSION_ON #define OutDayTest() / {/ static int i = 0;/ i++;/ if ( GetOutDay() > TEST_DAY_COUNT && i > 50 )/ {/ ::MessageBox( hWnd, L"试用期已过,请使用正式版", L"", MB_OK | MB_ICONINFORMATION );/ i = 0;/ return FALSE;/ }/ } #else #define OutDayTest() 0 #endif
3。最后将GBOutDayTest();这个宏放在适当的地方。就行了。
本文介绍了一种软件试用版的时间限制实现方法,通过记录软件的编译时间和计算当前时间与编译时间之间的差值来判断是否超过了设定的试用期限。


被折叠的 条评论
为什么被折叠?



