• 判断用户是否在操作 武胜


    namespace ActivityMonitor{ using System; using System.Runtime.InteropServices; class ActivityMonitor : System.ComponentModel.Component { public void Start()  { this.isIdle = false; timer.Elapsed -= Timer_Elapsed; timer.Elapsed += Timer_Elapsed; timer.Interval = this.resolution; timer.Start(); } public void Stop()  { timer.Stop(); } public bool IsIdle  { get { return this.isIdle; } private set { if (this.isIdle != value) { this.isIdle = value; if (isIdle && OnIdle != null) { OnIdle(this, EventArgs.Empty); } if (!isIdle && OnActive != null) { OnActive(this, EventArgs.Empty); } } } } public int IdleTimeOut  {  get { return idleTimeOut; } set { idleTimeOut = Math.Max(50, value); } } public int Resolution  {  get { return resolution; }  set { resolution = Math.Max(50, value); }  } public event EventHandler OnIdle; public event EventHandler OnActive; private void Timer_Elapsed(object sender, EventArgs e) { LASTINPUTINFO lastInputInfo = new LASTINPUTINFO(); lastInputInfo.size = 8; if (GetLastInputInfo(ref lastInputInfo)) { lastActivity = Math.Max(lastActivity, lastInputInfo.lastTick); int diff = Environment.TickCount - lastActivity; this.IsIdle = diff > this.IdleTimeOut; } } private bool isIdle = false; private int idleTimeOut = 5000; private int resolution = 100; private int lastActivity = Environment.TickCount; private System.Timers.Timer timer = new System.Timers.Timer(); [StructLayout(LayoutKind.Sequential)] private struct LASTINPUTINFO { public int size; public int lastTick; } [DllImport("User32")] private static extern bool GetLastInputInfo(ref LASTINPUTINFO lii); } class UnitTest { static void Main() { ActivityMonitor monitor = new ActivityMonitor(); monitor.IdleTimeOut = 2000; // 2 seconds monitor.OnIdle += delegate { Console.WriteLine("On idle"); }; monitor.OnActive += delegate { Console.WriteLine("On active"); }; monitor.Start(); Console.ReadLine(); } }}

    ////////////////////////////////

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

    private struct LASTINPUTINFO
    {
    public uint cbSize;

    public uint dwTime;
    }
    LASTINPUTINFO lastInPut = new LASTINPUTINFO();


    private void timer_Tick(object sender, EventArgs e)
    {
    //配置时间内无操作锁定
    lastInPut.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(lastInPut);
    GetLastInputInfo(ref lastInPut);

    long noOperationTime = System.Environment.TickCount - lastInPut.dwTime;

    if (noOperationTime > 毫秒时间)
    {
    //退出程序
    }

    }

  • 相关阅读:
    POJ 1401 Factorial
    POJ 2407 Relatives(欧拉函数)
    POJ 1730 Perfect Pth Powers(唯一分解定理)
    POJ 2262 Goldbach's Conjecture(Eratosthenes筛法)
    POJ 2551 Ones
    POJ 1163 The Triangle
    POJ 3356 AGTC
    POJ 2192 Zipper
    POJ 1080 Human Gene Functions
    POJ 1159 Palindrome(最长公共子序列)
  • 原文地址:https://www.cnblogs.com/zeroone/p/2940428.html
Copyright © 2020-2023  润新知