【问题标题】:Detecting idle users in Winforms检测 Winforms 中的空闲用户
【发布时间】:2018-03-20 20:12:59
【问题描述】:

如果用户闲置 5 分钟,我想暂停我的程序。不活动是指在那段时间没有按下鼠标或键盘(包括在程序之外!)。有什么出发点吗?

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    在计时器内,您可以 p/invoke GetLastInputInfo(),它将返回自检测到用户输入以来的毫秒数,涵盖当前会话中的所有进程。

    【讨论】:

    • 似乎是我需要的,但奇怪的是 LASTINPUTINFO 只有在我移动鼠标时才会增加。
    • 它返回最后一个输入的滴答时间,所以它会上升,从 Environment.TickCount 中扣除
    【解决方案2】:

    这个问题和一个老问题很相似:

    .NET equivalent for GetLastInputInfo?

    其中引用了一篇描述 C# 中一些不同选项的好文章:

    http://www.codeproject.com/KB/cs/uim.aspx

    如果您不介意使用 P/Invoke 并仅限于在 Windows 系统上运行,那么使用 P/Invoke 调用 GetLastInputInfo() 可能是完成您想要的最简单的方法。

    【讨论】:

      【解决方案3】:

      您可以覆盖 WndProc 并查找 WM_IDLE 消息

      【讨论】:

        【解决方案4】:

        我不久前使用过GMA.UserActivityMonitor 库来实现这一点。

        【讨论】:

          【解决方案5】:

          看起来我找到了解决您问题的方法,请看:

          How to detect a Winforms app has been idle for certain amount of timeuser34660 回答,

          对于您的应用,必须更改:

          const int MinuteMicroseconds = 60000;
          

          const int MinuteMicroseconds = 300000;
          

          只是时间,但以毫秒为单位。

          非常适合我的 Windows 窗体应用程序。

          【讨论】:

            猜你喜欢
            • 2017-05-07
            • 2015-01-25
            • 1970-01-01
            • 1970-01-01
            • 2011-03-07
            • 1970-01-01
            • 2013-03-28
            • 1970-01-01
            • 2011-03-06
            相关资源
            最近更新 更多