软件在指定时间间隔内无鼠标移动键盘点击等动作自动锁定的实现

/************************************************************************/
/* 说明:
调用函数GetLastInputInfo()以后, 结构成员lpi.dwTime 中的值并非上次输入事件
发生以后的毫秒数。而是上次输入事件发生时的系统运行时间。相当于上次输入事件
发生时执行了lpi.dwTime=::GetTickCount()。
::GetTickCount()-lpi.dwTime才是上次输入事件发生以后的毫秒数。
*/
/************************************************************************/
//注意: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);
}


原文地址:https://www.cnblogs.com/hzcya1995/p/13318778.html