winfrom 倒计时控件

最近在做一个快递柜项目,要求在用户没有操作的时间到了一分钟,自动返回主页,我于是封装了一个倒计时控件,废话少说,直接上代码

 public partial class RemainingTimeUC : UserControl

    {



        public RemainingTimeUC()

        {

            InitializeComponent();

        }

        Form ParantForm = null;

        private void RemainingTimeUC_Load(object sender, EventArgs e)

        {

           //获得用户控件所在的窗体

            ParantForm = this.FindForm();

        }

        #region timerUC_Tick事件

        private void timerUC_Tick(object sender, EventArgs e)

        {

            try

            {

                int TotalSecond = 60;//设置时间为60s

                var remainTime = TotalSecond - MouseKeyBoardOperate.GetLastInputTime();//总时间-用户未操作的时间

                this.labRT.Text = remainTime.ToString(CultureInfo.InvariantCulture);//显示离关闭的剩余时间



                if (remainTime == 30)

                {

                    this.labRT.ForeColor = Color.Orange;

                }

                if (remainTime <= 9)

                {

                    this.labRT.ForeColor = Color.Red;

                    this.labRT.Text = "0" + remainTime;

                }

                if (remainTime == 59)

                    this.labRT.ForeColor = Color.White;

                if (remainTime == 0)

                {

                    ParantForm.Close();

                }

            }

            catch (Exception ex)

            {

                LogHelper.WriteLog(this.Name + "timerUC_Tick", ex.Message);

            }



        }

        #endregion

    }

  

//

//此方法不知道是哪位前辈写的,借用一下

//

public class MouseKeyBoardOperate

{

/// <summary>

/// 创建结构体用于返回捕获时间

/// </summary>

[StructLayout(LayoutKind.Sequential)]

struct Lastinputinfo

{

/// <summary>

/// 设置结构体块容量

/// </summary>

[MarshalAs(UnmanagedType.U4)]

public int cbSize;



/// <summary>

/// 抓获的时间

/// </summary>

[MarshalAs(UnmanagedType.U4)]

public uint dwTime;

}



[DllImport("user32.dll")]

private static extern bool GetLastInputInfo(ref Lastinputinfo plii);



/// <summary>

/// 获取键盘和鼠标没有操作的时间

/// </summary>

/// <returns>用户上次使用系统到现在的时间间隔,单位为秒</returns>

public static long GetLastInputTime()

{

var vLastInputInfo = new Lastinputinfo();

vLastInputInfo.cbSize = Marshal.SizeOf(vLastInputInfo);

if (!GetLastInputInfo(ref vLastInputInfo))

{

return 0;

}

else

{

var count = Environment.TickCount - (long)vLastInputInfo.dwTime;

var icount = count / 1000;

return icount;

}

}

  

 

小于60秒的图实在是截不到。。。。。

你可能感兴趣的:(倒计时)