Windows 应用程序中的系统空闲检测

Posted

技术标签:

【中文标题】Windows 应用程序中的系统空闲检测【英文标题】:System Idle Detection in windows application 【发布时间】:2021-08-12 21:18:54 【问题描述】:

我想要一个应用程序,如果用户在某些分钟内不活动,则显示消息。

我用谷歌搜索了它并得到了解决方案,但对我来说很难理解,我不知道如何使用该代码,

如果有人向我提供一些文章,该文章显示了逐步检测用户不活动并在 Windows 应用程序 c# 中显示消息的过程,我们将不胜感激。

【问题讨论】:

【参考方案1】:

使用 Windows API 调用 GetLastInputInfo() 很容易做到这一点,前提是您可以这样做。这是它的示例包装类:

public sealed class UserActivityMonitor

    public UserActivityMonitor()
    
        _lastInputInfo.CbSize = Marshal.SizeOf(_lastInputInfo);
    

    /// <summary>Determines the time of the last user activity (any mouse activity or key press).</summary>
    /// <returns>The time of the last user activity.</returns>

    public DateTime LastActivity => DateTime.Now - this.InactivityPeriod;

    /// <summary>The amount of time for which the user has been inactive (no mouse activity or key press).</summary>

    public TimeSpan InactivityPeriod
    
        get
        
            GetLastInputInfo(ref _lastInputInfo);
            uint elapsedMilliseconds = (uint)Environment.TickCount - _lastInputInfo.DwTime;
            elapsedMilliseconds = Math.Min(elapsedMilliseconds, int.MaxValue);
            return TimeSpan.FromMilliseconds(elapsedMilliseconds);
        
    

    /// <summary>Struct used by Windows API function GetLastInputInfo()</summary>
    struct LastInputInfo
    
        public int  CbSize;
        public uint DwTime;
    

    [DllImport("user32.dll")]
    [DefaultDllImportSearchPaths(DllImportSearchPath.System32)]
    [return: MarshalAs(UnmanagedType.Bool)]

    static extern bool GetLastInputInfo(ref LastInputInfo plii);

    LastInputInfo _lastInputInfo;

要使用它,只需创建类的一个实例并定期检查InactivityPeriod 属性(例如,使用Timer)。

【讨论】:

我理解代码,但是我必须把这段代码放在哪里,我的意思是在 program.cs 文件或其他地方。 您只需将其添加到您的应用程序的单独代码文件中的新类中,就像您编写的任何其他类一样。

以上是关于Windows 应用程序中的系统空闲检测的主要内容,如果未能解决你的问题,请参考以下文章

如何使用“C”在 Windows 中找到空闲的 TCP 端口

Netty对读写空闲检测的支持

如何防止Windows进入空闲状态?

带有 Windows 身份验证的 ASP.Net Core 3.1 中的空闲超时

在 Xamarin 表单中检测 iOS 的应用空闲时间段

检测系统重启并启动应用程序