检测用户空闲(每个应用程序实例)

时间:2011-02-15 14:03:45

标签: c# .net idle-processing

我只需要在我的应用程序中进行用户空闲检测(按照“我的应用程序实例”) 我无法使用 GetLastInputInfo 因为特定于会话的用户输入

  

GetLastInputInfo 在所有正在运行的会话中提供系统范围的用户输入信息。相反,GetLastInputInfo仅为调用该函数的会话提供特定于会话的用户输入信息。

有什么建议吗?

3 个答案:

答案 0 :(得分:5)

我假设您要检测空闲时间,但仅在应用程序处于活动状态时才会检测。然后,您必须准确定义您的应用程序处于活动状态的含义。当您的应用程序处于活动状态时(根据您自己的定义),您可以定期调用GetLastInputInfo来确定应用程序处于活动状态时的空闲时间(例如,使用某种计时器)。

Windows具有前景窗口的概念,可以使用GetForegroundWindow重试当前前景窗口。您可以使用GetWindowThreadProcessId查找拥有前台窗口的进程的进程ID。如果该进程ID是您的进程ID,即使您的应用程序有多个窗口,您也知道您是前台进程。您必须定期进行此检测,就像检查空闲时间一样。

您不应该担心GetLastInputInfo仅提供有关会话的信息。如果多个用户登录到同一台Windows计算机上,则每个用户都有自己的会话,但另一个用户在会话中处于空闲状态或不在会话状态时,不会影响您检测应用程序用户是否空闲的方式。

答案 1 :(得分:4)

您可以使用Application.AddMessageFilter并观察代表用户互动的消息(例如鼠标,键盘,菜单激活)。

答案 2 :(得分:2)

如果这是Windows窗体应用程序,则可以创建空闲事件处理程序并订阅Application.Idle事件。当应用程序完成处理并即将进入空闲状态时,您将收到通知。