使用.NET检测用户是否远离PC
我有一个桌面应用程序,我想知道两件事:
- 用户当前是否在PC上(更具体地说,他是否向PC提供任何输入),因此如果需要,我可以将其状态更改为“离开”; 和
- 屏幕保护程序是否正在运行,因此我可以在此期间执行更多CPU密集型工作。
我正在使用C#/ .NET。 您如何建议解决这两项任务?
注意 :WIN32调用和任何非托管代码解决方案一样好。
http://dataerror.blogspot.com/2005/02/detect-windows-idle-time.html
^检测Windows空闲时间。 🙂
此function的启用程序是GetLastInputInfo()Win32 API和LASTINPUTINFO Win32结构。
以下是检测屏幕保护程序是否正在运行的代码。 有关详细信息,请参阅此
const int SPI_GETSCREENSAVERRUNNING = 114; [DllImport( "user32.dll", CharSet = CharSet.Auto )] private static extern bool SystemParametersInfo( int uAction, int uParam, ref bool lpvParam, int flags ); // Returns TRUE if the screen saver is actually running public static bool GetScreenSaverRunning( ) { bool isRunning = false; SystemParametersInfo( SPI_GETSCREENSAVERRUNNING, 0, ref isRunning, 0 ); return isRunning; }
而不是确定何时运行更密集的工作…考虑尽可能早地完成“密集工作”,但是线程优先级较低。
我不认为你的问题在纯C#中有答案,除非你轮询鼠标位置并观察动作……或类似的东西。
你可以使用全局键盘/鼠标钩子,当你从任一个接收到一个事件时,只需将你的“计数器”重置为0。 当您的计数器达到您要查找的空闲时间时,请执行后台操作。
这里有一些代码可以让您轻松地在.NET中进行挂钩: http : //www.codeproject.com/KB/cs/globalhook.aspx