GetLastInputInfo //得到键盘鼠标的输入信息,用开机到现在的时间,减去最后输入的时间,就能得到离开状态的时间。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
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); //定时器 } |
转载请注明:exchen's blog » GetLastInputInfo 判断离开状态