using System.Runtime.InteropServices; private void timer1_Tick(object sender, EventArgs e) { //判断空闲时间是否超过1分钟,超过则自动关闭窗口 if (GetIdleTick() / 1000 >= 1 * 60) { Application.Exit(); this.Close(); } } /// <summary> /// 获取鼠标键盘空闲时间 /// </summary> /// <returns></returns> public static long GetIdleTick() { LASTINPUTINFO lastInputInfo = new LASTINPUTINFO(); lastInputInfo.cbSize = Marshal.SizeOf(lastInputInfo); if (!GetLastInputInfo(ref lastInputInfo)) return 0; return Environment.TickCount - (long)lastInputInfo.dwTime; } private struct LASTINPUTINFO { [MarshalAs(UnmanagedType.U4)] public int cbSize; [MarshalAs(UnmanagedType.U4)] public uint dwTime; } /// <summary> /// 调用windows API获取鼠标键盘空闲时间 /// </summary> /// <param name="plii"></param> /// <returns></returns> [DllImport("user32.dll")] private static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);