时间限制

时间限制程序有两类,一类是限制每次运行的时长。一类是有使用期限。

定时器

有一类程序,每次运行都有时间限制,这类程序中有一个计时器在统计程序运行的时间。

  • SetTimer()函数,当你想每隔一段时间执行一件事的的时候可以使用它。 使用定时器的方法比较简单,通常告诉系统一个时间间隔,然后系统以此时间间隔周期性触发事件。

通常有两种方法来实现:发送WM_TIMER消息和调用应用程序定义的回调函数。不需要指定定时器时,可以调用对应的KillTimer函数销毁指定的时钟

  • SetTimer( )函数原型:
UINT_PTRSetTimer(
 HWND hWnd, // 窗口句柄
    UINT_PTR nIDEvent,     // 新创建的定时器标识号码(非零),当一个应用程序需要多个定时器时,靠此参数的不同来加以区别
    UINT uElapse,   // 定时器间隔,以毫秒为单位,当由该参数规定的时间到后,系统发送消息
    TIMERPROC lpTimerFunc  // 回调函数,在这个函数里,放入你想要做的事情的代码
    ); 
    
   例如:SetTimer(m_hWnd,1,1000,NULL); //一个1秒触发一次的定时器

当不需要计时器的时候调用KillTimer(nIDEvent);
例如:KillTimer(1);

  • GetTickCount()函数
    该函数返回的是系统成功启动以来所经过的时间,即计算两个时间点的时间间隔。所以调用两次,用相减去计算程序运行的时间。

使用期限

演示版程序一般都有使用时间限制,超过试用期就不能运行,这种保护实现的方式大致如下:在安装软件或者第一次启动程序的时候获得系统日期。这个时间称为软件的安装日期,程序每次运行时都有取得当前系统日期,并将其与之前记录的安装日期进行比较,差值超过允许时间时就停止运行。

如果考虑的比较周全,程序至少要保存两个时间值
1、安装时间
2、程序最近一次运行的日期,这是防止用户将日期改回去而设的,软件每次启动时要把该日期读出,与当前日期进行比较,如果大于当前系统日期,说明用户修改了机器时间,程序可以拒绝运行。程序每次退出的时候将当前时间写入最后运行时间。

程序通常会采用GetSystemTime,GetLocalTime这两个API来获取系统时间,之后和上一次程序关闭的时候进行对比,我们可以在这几个函数下断。

还有一种可以比较方便获得当前系统日期的方法就是读取频繁修改的系统文件的最后修改日期GetFileTime,FileTimeToSystemTime()函数将其转换为系统日期格式,从而得到当前系统日期

timer.exe采用SetTimer()函数倒计时,每次运行20秒,20秒后退出,用SetTimer()函数设置一个定时器,时间间隔为1000ms,每一秒发送一次WM_TIMER消息,当程序收到消息时将变量加一,直到20关闭程序。
在这里插入图片描述
执行如下语句

if(i<=19)
    i++;
else
    SendMessage(WM_CLOSE)//关闭程序

辅助工具变速齿轮可以加快和减慢应用程序的时间,本来软件运行20秒退出,可以用变速齿轮让时间减速,最大可减慢256倍。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43916678/article/details/103546602
今日推荐