GetLastInputInfo计时用户离开电脑及软件在指定时间锁定等(转)

 1 /************************************************************************/
 2 /* 说明:
 3 调用函数GetLastInputInfo()以后, 结构成员lpi.dwTime 中的值并非上次输入事件
 4 发生以后的毫秒数。而是上次输入事件发生时的系统运行时间。相当于上次输入事件
 5 发生时执行了lpi.dwTime=::GetTickCount()。
 6 ::GetTickCount()-lpi.dwTime才是上次输入事件发生以后的毫秒数。
 7 */
 8 /************************************************************************/
 9 //注意:windows2000以上系统才支持函数GetLastInputInfo()因此有可能需要在StdAfx.h中加上如下语句:
10 #define _WIN32_WINNT 0x0500
11 //或者:
12 #ifdef _WIN32_WINNT 
13 #undef _WIN32_WINNT 
14 #endif 
15 #define _WIN32_WINNT 0x0500 
16 
17 //首先定义一个计时器计时事件的定义
18 #define  GETLASTINPUTINFO  109
19 
20 //然后写一个Time计时器(具体计时器的生成步骤就不在叙述)
21 
22 //1、在程序初始化的时候调用
23 m_uGetLastInputInfo = SetTimer(GETLASTINPUTINFO, 500, NULL);//设置获取键盘和鼠标处于空闲状态的时间的计时器
24 
25 
26 //2、处理函数
27 void CNetAppSoftDlg::OnTimer(UINT nIDEvent)
28 {
29     LASTINPUTINFO lpi;
30     DWORD dwTime = 0;
31 
32     switch(nIDEvent)
33     {
34     case GETLASTINPUTINFO://zhouzx 获取键盘和鼠标处于空闲状态的时间
35 
36         lpi.cbSize = sizeof(lpi);
37         GetLastInputInfo(&lpi);//关于此windows API接口的介绍,参见同文件夹下的文档
38         dwTime = ::GetTickCount()-lpi.dwTime;
39 
40         if (dwTime >= 30000)//30秒
41         {
42             if (m_uGetLastInputInfo)
43             {
44                 KillTimer(GETLASTINPUTINFO);
45             }
46             OnBnClickedButtonLock();
47         }
48         break;
49     default:
50         break;
51     }
52     CDialog::OnTimer(nIDEvent);
53 }
54 
55 //3、在软件解锁后的地方重新开始新的计时
56 m_uGetLastInputInfo = SetTimer(GETLASTINPUTINFO, 500, NULL);
57 
58 //4、在推出软件的时候,如果计时器没有停止,要关闭计时器
59 if (m_uGetLastInputInfo)
60 {
61     //结束获取键盘和鼠标处于空闲状态的时间定时器
62     KillTimer(GETLASTINPUTINFO);
63 }

转载:http://www.cnblogs.com/ziwuge/archive/2011/12/22/2296559.html

转载:http://blog.csdn.net/yockie/article/details/7770599

原文地址:https://www.cnblogs.com/chechen/p/5511572.html