我有一个桌面应用程序,我想知道两件事:
我正在使用C#/ .NET。您如何建议解决这两项任务?
注意:WIN32调用和任何非托管代码解决方案一样好。
答案 0 :(得分:5)
http://dataerror.blogspot.com/2005/02/detect-windows-idle-time.html
^检测Windows空闲时间。 :)
此功能的启用程序是GetLastInputInfo() Win32 API和LASTINPUTINFO Win32结构。
答案 1 :(得分:5)
以下是检测屏幕保护程序是否正在运行的代码。有关详细信息,请参阅this
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;
}
答案 2 :(得分:0)
而不是确定何时运行更密集的工作......考虑尽可能早地完成“密集工作”,但线程优先级较低。
我不认为你的问题在纯C#中有答案,除非你轮询鼠标位置并观察动作......或类似的东西。
答案 3 :(得分:0)
您可以使用全局键盘/鼠标挂钩,只需在收到任何一个事件时将“计数器”重置为0即可。当您的计数器达到您要查找的空闲时间时,请执行后台操作。
这里有一些代码允许您轻松地在.NET中进行挂钩:http://www.codeproject.com/KB/cs/globalhook.aspx