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

标签 c# .net idle-processing

我只需要在我的应用程序中检测用户空闲(根据“我的应用程序实例”)。
我不能使用 GetLastInputInfo 因为 特定于 session 的用户输入:

GetLastInputInfo does not provide system-wide user input information across all running sessions. Rather, GetLastInputInfo provides session-specific user input information for only the session that invoked the function.

有什么建议吗?

最佳答案

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

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

您不必担心 GetLastInputInfo 仅提供有关 session 的信息。如果多个用户登录到同一台 Windows 计算机,他们每个人都有自己的 session ,但另一个用户在 session 中空闲或不空闲不应影响您检测应用程序用户是否空闲的方式。

关于c# - 检测用户空闲(每个应用程序实例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5004614/

相关文章:

.net - 有没有一种简单的方法可以从文本文件生成代码?

c# - GetLastInputInfo 是用户特定的 - 是否有类似的东西可以提供机器范围的最后输入时间

.net - 识别 Windows 机器上的空闲状态

c# - XPath获取youtube视频C#

c# - COM-Interop:将 .NET Framework 版本从 2.0 更改为 4.0 - 我是否也应该更改 Guid?

C# 公共(public)库

delphi - 为什么要在 getmessage 之前先 peekmessage?

c# - 任务并行库时间分片

c# - 使用简单方法安全删除文件?

c# - 如何使用反射转换为通用接口(interface)?