msdn上已经有个神奇的系统函数GetLastInputInfo用来获取用户的最后输入(鼠标或键盘)时间。
PS:vs2005版本的msdn才有,vc6版本较低,是没有这个系统函数的。并且明确表示支持该函数的系统仅仅是windows 2000(事实上,NT内核的所有版本系统应该都是支持的,笔者win 7测试通过)。
原型如下:
BOOL GetLastInputInfo( PLASTINPUTINFO plii );
使用方法如下:
1 /* 获取用户鼠标键盘闲置时间 2 * 3 * 成功返回非负整数,表示用户闲置的毫秒数 4 * 失败返回负整数 5 */ 6 int CountUserIdleTime(void) 7 { 8 LASTINPUTINFO info; 9 info.cbSize = sizeof(LASTINPUTINFO); 10 if (!GetLastInputInfo(&info)) 11 return -1; 12 13 DWORD idle_time = GetTickCount() - info.dwTime; 14 return (int)idle_time; 15 }