GetLastInputInfo
计时键盘、鼠标处于空闲状态的时间,不清楚计时其他电脑I/O设备的空闲状态不?
所以呢,这个函数使用方面很广,可以计时用户离开电脑之后的延展作用,比如屏保和当用户离开时软件自动锁定。我在网上找到一个源码,实现软件在用户未操作电脑到时后自动锁定,见下文:
//注意:windows2000以上系统才支持函数GetLastInputInfo()因此有可能需要在StdAfx.h中加上如下语句:
#define _WIN32_WINNT 0x0500
//或者:
#ifdef _WIN32_WINNT
#undef _WIN32_WINNT
#endif
#define _WIN32_WINNT 0x0500
//首先定义一个计时器计时事件的定义
#define GETLASTINPUTINFO 109
//然后写一个Time计时器(具体计时器的生成步骤就不在叙述)
//1、在程序初始化的时候调用
m_uGetLastInputInfo = SetTimer(GETLASTINPUTINFO, 500,
NULL);//设置获取键盘和鼠标处于空闲状态的时间的计时器
//2、处理函数
void CNetAppSoftDlg::OnTimer(UINT nIDEvent)
{
LASTINPUTINFO lpi;
DWORD dwTime = 0;
switch(nIDEvent)
{
case GETLASTINPUTINFO://zhouzx 获取键盘和鼠标处于空闲状态的时间
lpi.cbSize = sizeof(lpi);
GetLastInputInfo(&lpi);//关于此windows API接口的介绍,参见同文件夹下的文档
dwTime = ::GetTickCount()-lpi.dwTime;
if (dwTime >= 30000)//30秒
{
if (m_uGetLastInputInfo)
{
KillTimer(GETLASTINPUTINFO);
}
OnBnClickedButtonLock();
}
break;
default:
break;
}
CDialog::OnTimer(nIDEvent);
}
//3、在软件解锁后的地方重新开始新的计时
m_uGetLastInputInfo = SetTimer(GETLASTINPUTINFO, 500, NULL);
//4、在推出软件的时候,如果计时器没有停止,要关闭计时器
if (m_uGetLastInputInfo)
{
//结束获取键盘和鼠标处于空闲状态的时间定时器
KillTimer(GETLASTINPUTINFO);
}