C# 如何 获得 WM 系统闲置时间?
C# 如何 获得 WM 系统闲置时间?
这段时间想写一个锁屏的程序.. 所以用到了这个.. 具体想法是: 获得系统的闲置时间.. 如果这个时间超过了1分钟..就自动运行 我的锁屏程序..
在网上找了好久. 无果. 希望 这里有前辈帮兄弟一把~~ 多谢!
有些资料上面提到 调用 coredll.dll 里的 Getidletime() 来得到闲置时间... 但我发现这个函数好像是用来获得CPU的闲置时间的... 使用的时候不管等多久.只返回0.
高手们 专家们.. 个人觉得这个问题应该不是很难解决吧.. 因为网上不少WM程序都会用到的...比如 : 让背景灯在闲置一定时间后关闭.. 等等...
[解决办法]
class MouseKeyBoardOperate
{
/// <summary>
/// 创建结构体用于返回捕获时间
/// </summary>LayoutKind.Sequential 用于强制将成员按其出现的顺序进行顺序布局。
[StructLayout(LayoutKind.Sequential)]
struct LASTINPUTINFO
{
/// <summary>
/// 设置结构体块容量
/// </summary>MarshalAs属性指示如何在托管代码和非托管代码之间封送数据。
[MarshalAs(UnmanagedType.U4)]
public int cbSize;
/// <summary>
/// 抓获的时间
/// </summary>
[MarshalAs(UnmanagedType.U4)]
public uint dwTime;
}
static LASTINPUTINFO vLastInputInfo;
public MouseKeyBoardOperate()
{
vLastInputInfo = new LASTINPUTINFO();
}
[DllImport("user32.dll")]
private static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
/// <summary>
/// 获取键盘和鼠标没有操作的时间
/// </summary>
/// <returns>用户上次使用系统到现在的时间间隔,单位为秒</returns>
public static long GetLastInputTime()
{
//LASTINPUTINFO vLastInputInfo = new LASTINPUTINFO();
vLastInputInfo.cbSize = Marshal.SizeOf(vLastInputInfo);
if (!GetLastInputInfo(ref vLastInputInfo))
{
return 0;
}
else
{
long count = Environment.TickCount - (long)vLastInputInfo.dwTime;
long icount = count / 1000;
return icount;
}
}
}