使用.NET检测用户是否远离PC

我有一个桌面应用程序,我想知道两件事:

  1. 用户当前是否在PC上(更具体地说,他是否向PC提供任何输入),因此如果需要,我可以将其状态更改为“离开”; 和
  2. 屏幕保护程序是否正在运行,因此我可以在此期间执行更多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