c#超时锁定

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using System.Runtime.InteropServices;
  9. namespace VistaRenderer
  10. {
  11.     public partial class FrmTestTimeout : Form
  12.     {
  13.         public FrmTestTimeout()
  14.         {
  15.             InitializeComponent();// this.timer1 = new System.Windows.Forms.Timer(this.components);
  16.         }
  17.         private void FrmTestTimeout_Load(object sender, EventArgs e)
  18.         {
  19.             timer1.Enabled = true;
  20.             timer1.Interval = 2 * 1000;// 计时器触发间隔 2秒
  21.             this.timer1.Tick += new EventHandler(timer1_Tick);
  22.         }
  23.         /// <summary>
  24.         /// 计时器触发
  25.         /// </summary>
  26.         /// <param name=”sender”></param>
  27.         /// <param name=”e”></param>
  28.         void timer1_Tick(object sender, EventArgs e)
  29.         {
  30.             // 距离上一次系统输入时间大于5秒
  31.             if (GetLastInputTime() >=  5 * 1000)
  32.             {
  33.                 MessageBox.Show(“time out”);//这里可以写超时处理,比如弹出一个锁定窗口
  34.             }
  35.         }
  36.         [StructLayout(LayoutKind.Sequential)]
  37.         struct LASTINPUTINFO
  38.         {
  39.             [MarshalAs(UnmanagedType.U4)]
  40.             public int cbSize;
  41.             [MarshalAs(UnmanagedType.U4)]
  42.             public uint dwTime;
  43.         }
  44.         [DllImport(“user32.dll”)]
  45.         static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
  46.         /// <summary>
  47.         /// 获得距离上一次操作时间间隔
  48.         /// </summary>
  49.         /// <returns></returns>
  50.         static long GetLastInputTime()
  51.         {
  52.             LASTINPUTINFO vLastInputInfo = new LASTINPUTINFO();
  53.             vLastInputInfo.cbSize = Marshal.SizeOf(vLastInputInfo);
  54.             if (!GetLastInputInfo(ref vLastInputInfo)) return 0;
  55.             return Environment.TickCount – (long)vLastInputInfo.dwTime;
  56.         }
  57.     }
  58. }

标签