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

C# 检测用户空闲(每个应用程序实例),c#,.net,idle-processing,C#,.net,Idle Processing,我只需要在我的应用程序中进行用户空闲检测(每个“我的应用程序实例”)。 我无法使用,因为它是会话特定的用户输入: GetLastInputInfo不在所有正在运行的会话中提供系统范围的用户输入信息。相反,GetLastInputInfo只为调用该函数的会话提供会话特定的用户输入信息 有什么建议吗?您可以使用并观察表示用户交互的消息(例如鼠标、键盘,可能是菜单激活)。我假设您希望检测空闲时间,但仅当应用程序处于活动状态时。然后,您必须准确定义应用程序处于活动状态的含义。当应用程序处于活动状态时(根

我只需要在我的应用程序中进行用户空闲检测(每个“我的应用程序实例”)。
我无法使用,因为它是会话特定的用户输入:

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


有什么建议吗?

您可以使用并观察表示用户交互的消息(例如鼠标、键盘,可能是菜单激活)。

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

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


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

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

这是什么类型的应用程序?Windows应用程序?您在多台计算机上运行它?你想得到什么?是的,Windows应用程序。当你说“每个应用程序实例”时,它可以在同一台计算机上运行在同一个“Windows用户”上。你的意思是检查系统中所有正在运行的应用程序上的空闲,还是只检查你自己的应用程序?只检查我自己的应用程序我需要通知用户空闲,而不是应用程序空闲。我的应用程序有很多后台处理任务。@halorty:对于
application.Idle
而言,“Idle”是用户界面空闲。当UI线程完成处理并即将进入空闲状态时,您将获得
Application.idle
事件。后台线程上发生的事情不会改变这一点。我想检测应用程序处于活动和非活动状态时的空闲时间。我的意思是,当最小化时,当maxmalized但用户使用oter应用程序时,当用户使用我的应用程序(活动)但不执行任何操作(不使用鼠标、键盘等)时,当我的应用程序活动时(根据我自己的定义,如上所述),我不能定期使用GetLastInputInfo,例如当我的应用程序最小化时(根据我自己的定义,我的应用程序处于活动状态)。