Winforms 如何知道用户在winform场景中处于活动状态?

Winforms 如何知道用户在winform场景中处于活动状态?,winforms,logout,Winforms,Logout,要求是,如果用户在过去60秒内没有单击winform应用程序上的任何内容,它应该执行自动注销操作。所以,除了重置每个菜单、每个按钮等上的计数器(这是一个巨大的负担)之外,还有什么更简单的方法来检测用户已处于非活动状态60秒吗?我使用此代码来计算非活动时间。它的工作真的很好,我希望它也能帮助你 public struct LASTINPUTINFO { public uint cbSize; public uint dwTime; } [DllImport("User32.dll

要求是,如果用户在过去60秒内没有单击winform应用程序上的任何内容,它应该执行自动注销操作。所以,除了重置每个菜单、每个按钮等上的计数器(这是一个巨大的负担)之外,还有什么更简单的方法来检测用户已处于非活动状态60秒吗?

我使用此代码来计算非活动时间。它的工作真的很好,我希望它也能帮助你

public struct LASTINPUTINFO
{
    public uint cbSize;
    public uint dwTime;
}

[DllImport("User32.dll")]
private static extern Boolean GetLastInputInfo(ref LASTINPUTINFO plii);

/// <summary>
/// Get inactivity time
/// </summary>
/// <returns>Inactivity time in ms</returns>    
public static int GetIdleTime()
{
    LASTINPUTINFO lastInputInfo = new LASTINPUTINFO();
    lastInputInfo.cbSize = (UInt32)   System.Runtime.InteropServices.Marshal.SizeOf(lastInputInfo);

    if (GetLastInputInfo(ref lastInputInfo))
    {
       UInt32 lastInputTick = lastInputInfo.dwTime;
       if (lastInputTick == 0)
          return 0;
       return (Environment.TickCount - (Int32)lastInputInfo.dwTime);
    }
    else
        return 0;
 }


 //In your method :
if (GetIdleTime() >= yourTime)
{
    //logout
}
public结构LASTINPUTINFO
{
公共单位cbSize;
公共时间;
}
[DllImport(“User32.dll”)]
私有静态外部布尔GetLastInputInfo(参考LASTINPUTINFO plii);
/// 
///获取不活动时间
/// 
///不活动时间(毫秒)
公共静态int GetIdleTime()
{
LASTINPUTINFO LASTINPUTINFO=新的LASTINPUTINFO();
lastInputInfo.cbSize=(UInt32)System.Runtime.InteropServices.Marshal.SizeOf(lastInputInfo);
if(GetLastInputInfo(参考lastInputInfo))
{
UInt32 LASTINPUTICK=lastInputInfo.dwTime;
如果(lastInputTick==0)
返回0;
返回(Environment.TickCount-(Int32)lastInputInfo.dwTime);
}
其他的
返回0;
}
//在您的方法中:
如果(GetIdleTime()>=yourTime)
{
//注销
}