GetLastInputInfo //得到键盘鼠标的输入信息,用开机到现在的时间,减去最后输入的时间,就能得到离开状态的时间。
typedef struct tagLASTINPUTINFO { UINT cbSize; DWORD dwTime; } LASTINPUTINFO, *PLASTINPUTINFO;
typedef BOOL (*MyGetLastInputInfo)(PLASTINPUTINFO);
MyGetLastInputInfo MyGetLastInputInfo_Address;
void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime)
{
LASTINPUTINFO lii;
lii.cbSize=sizeof(LASTINPUTINFO);
HMODULE hModule = LoadLibrary("User32.dll");
MyGetLastInputInfo_Address = (MyGetLastInputInfo)GetProcAddress(hModule,"GetLastInputInfo");
if (MyGetLastInputInfo_Address == NULL)
{
MessageBox(0,"GetProcAddress error",0,0);
return;
}
//这样调用程序崩溃了,原因未知
//MyGetLastInputInfo_Address(&lii);
//改成汇编方式调用,OK
__asm
{
lea eax,lii
push eax
call MyGetLastInputInfo_Address
}
//开机到现在的时间,减去最后输入的时间
unsigned long ulTickTimes = GetTickCount() - lii.dwTime;
if (ulTickTimes >= 10000)
{
MessageBox(0,"离开状态","离开",0);
}
}
void CMyDlg::OnOK()
{
// TODO: Add extra validation here
::SetTimer(0,1,5000,TimerProc); //定时器
}