zoukankan      html  css  js  c++  java
  • 第五章——演示版保护技术-时间限制,菜单功能限制

    时间限制程序一种为每次运行时长10.20分钟后停止,必须重新启动。计时器有如下选择:
    1.setTime()函数
    此函数可以在程序调用的时候,指定一个时间,同时获取一个超时后的回调函数。如果超过这个时间,系统则会给计时器窗口发送WM_TIMER,或者调用程序提供的回调函数
    函数原型:
    UINT_PTRSetTimer(
      HWND hWnd,                    // 窗口句柄
      UINT_PTR nIDEvent,           // 定时器ID,多个定时器时,可以通过该ID判断是哪//个定时器
      UINT uElapse,                     // 时间间隔,单位为毫秒
      TIMERPROC lpTimerFunc   // 回调函数
    );
     
    回调函数原型:
    void CALLBACK TimerProc(
    HWND     hwnd,
    UINT        uMsg,
    UINT        idEvent,
    DWORD   dwTime
    );
    SetTimer()函数是以windows消息分发方式工作,如果程序不需要计时器可以调用KillTimer()来销毁计时器
     
    2.高精度多媒体计时器
    timeSetEvent()函数
     
    MMRESULT timeSetEvent( 
                                     UINT                         uDelay,
                                     UINT                         uResolution,
                                     LPTIMECALLBACK    lpTimeProc,
                                     WORD                      dwUser,
                                     UINT                         fuEvent )
     
             uDelay:以毫秒指定事件的周期。
             Uresolution:以毫秒指定延时的精度,数值越小定时器事件分辨率越高。缺省值为1ms。
             LpTimeProc:指向一个回调函数。
             DwUser:存放用户提供的回调数据。
             FuEvent:指定定时器事件类型:
             TIME_ONESHOT:uDelay毫秒后只产生一次事件
             TIME_PERIODIC :每隔uDelay毫秒周期性地产生事件。
     
    该函数的参数说明如下:参数uDelay表示延迟时间;参数uResolution表示时间精度,在Windows中缺省值为1ms;lpTimeProc表示回调函数,为用户自定义函数,定时调用; 参数dwUser表示用户提供的回调数据;参数fuEvent为定时器的事件类型,TIME_ONESHOT表示执行一次;TIME_PERIODIC:周期性执行。具体应用时,可以通过调用timeSetEvent()函数,将需要周期性执行的任务定义在lpTimeProc回调函数中(如:定时采样、控制等),从而完成所需处理的事件。需要注意的是:任务处理的时间不能大于周期间隔时间。另外,在定时器使用完毕后,应及时调用timeKillEvent()将之释放。
     
    3.GetTickCount()函数
        该函数返回的事系统成功启动以来所经过的时间,所以调用两次,用相减去计算程序运行的时间。也可以利用C语言中的time()函数,类似的函数也有timeGetTime()
     
     
    时间限制思路:
        软件通常会采用GetSystemTime,GetLocalTime,GetFileTime,这三个API来获取系统时间,之后和上一次程序关闭的时候进行对比,我们可以在这几个函数下断。还有一种方法,软件通过读取系统文件(windows的 user.bat或system.dat)来判断最后的修改时间,利用FileTimeToSystemTime()来转换为系统日期格式,从而获取当前系统时间,(但是这种方式必须防备RegMon,FileMon之类的软件)
     
    菜单功能限制
        菜单限制就是非付费版的软件,功能会不齐全,付费后功能全部解锁,相关的函数有:
    1.EnableMenultem()函数
    BOOL EnableMenultem(
                    HMENU       hMenu,                    //菜单句柄
                    UINT            uIDEnableItem,        //禁止或允许一个菜单条目的标识符
                    UINT            uEnable);                  //控制标志  
    控制标志:MF_ENABLED(允许,0h) 、MF_GRAYED(灰化 ,1h)、MF_DISABLED(禁止,2h) 等
    返回值:返回以前的状态。如果菜单项不在,返回FFFFFFFFh
        
    EnableWindow()函数
    允许或禁止制定窗口
    BOOL EnableWindow(
            HWND    hWnd,                 //窗口句柄
            BOOL       bEnable);            //TRUE为允许,FALSE为禁止
    返回0为失败,非零为失败
     
     
     
  • 相关阅读:
    实现简单高效的网址(文本)缩短服务
    Xsl模板应用基础(三、模板嵌套)
    Xsl模板应用基础(二、程序转换)
    Xsl模板应用基础(一、介绍)
    C#调用360杀毒软件查杀指定路径
    微信公众平台网页授权获取用户基本信息(VS.NET版)
    微信公众平台开发者模式自动回复功能与自定义菜单
    微信公众平台接入
    Git常用操作整理
    JVM知识点总结(一)——运行时数据区
  • 原文地址:https://www.cnblogs.com/Tempt/p/10134260.html
Copyright © 2011-2022 走看看