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