返回
C# 中检测用户闲置状态:如何获取上次交互时间?
windows
2024-03-11 17:23:26
## 检测用户闲置状态:在 C# 中检索用户上次与操作系统的交互时间
问题陈述
假设你正在开发一款托盘应用程序,需要判断用户何时处于闲置状态。为此,你必须获取用户上次与操作系统交互的时间。
解决方案
Windows 操作系统会跟踪用户上次交互的时间,你可以通过 GetLastInputInfo Windows API 检索此信息。
实现步骤
1. 导入必要的命名空间:
using System.Runtime.InteropServices;
2. 定义 GetLastInputInfo 结构:
[DllImport("user32.dll")]
private static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
3. 定义 LASTINPUTINFO 结构体:
public struct LASTINPUTINFO
{
public uint cbSize;
public uint dwTime;
}
4. 获取上次交互时间:
LASTINPUTINFO lastInputInfo = new LASTINPUTINFO();
lastInputInfo.cbSize = (uint)Marshal.SizeOf(typeof(LASTINPUTINFO));
GetLastInputInfo(ref lastInputInfo);
long idleTime = Environment.TickCount - lastInputInfo.dwTime;
代码示例
using System;
using System.Runtime.InteropServices;
class Program
{
[DllImport("user32.dll")]
private static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
public struct LASTINPUTINFO
{
public uint cbSize;
public uint dwTime;
}
static void Main(string[] args)
{
LASTINPUTINFO lastInputInfo = new LASTINPUTINFO();
lastInputInfo.cbSize = (uint)Marshal.SizeOf(typeof(LASTINPUTINFO));
GetLastInputInfo(ref lastInputInfo);
long idleTime = Environment.TickCount - lastInputInfo.dwTime;
Console.WriteLine("User has been idle for {0} milliseconds.", idleTime);
}
}
结论
通过使用 GetLastInputInfo 函数,你可以准确确定用户上次与计算机交互的时间。这对于创建检测用户闲置状态的应用程序非常有用,例如屏幕保护程序或电源管理工具。
常见问题解答
-
Q1:此方法是否适用于所有 Windows 版本?
A:是的,GetLastInputInfo 函数可在所有 Windows 版本中使用。 -
Q2:精度如何?
A:精度取决于操作系统使用的时钟,通常为毫秒级。 -
Q3:我可以在多线程应用程序中使用它吗?
A:是的,但建议使用互斥或其他同步机制来防止并发访问。 -
Q4:是否可以检测到鼠标移动和键盘输入?
A:是的,此方法可以检测到任何形式的用户输入,包括鼠标移动和键盘输入。 -
Q5:是否存在替代方法?
A:是的,还有其他方法可以检测用户闲置状态,例如使用基于事件的监听器或轮询活动计时器。然而,GetLastInputInfo 通常被认为是更简单和更准确的方法。