WPF-006:判断当前是否有人操作

检测当前程序是否有人操作应该再实际中还是有用的。最简单的方法时判断鼠标位置是否改变了。winform中也是一样。直接看代码:

public class CheckUsedManager
    {
         public static event EventHandler TimeToFinishedEvent = null;

        private static DispatcherTimer checkUsedTimer = new DispatcherTimer();

        private static Point mousePosition = GetMousePoint();

        static CheckUsedManager()
        {
            checkUsedTimer.Interval = TimeSpan.FromSeconds(秒数);

            checkUsedTimer.Tick += new EventHandler(CheckUsedTimer_Tick);

            checkUsedTimer.Start();
        }

        static void CheckUsedTimer_Tick(object sender, EventArgs e)
        {
            if (!HaveUsedTo())
            {
                if (TimeToFinishedEvent != null)
                {
                    TimeToFinishedEvent(null, null);
                }
            }
        }

        private static bool HaveUsedTo()
        {
            Point point = GetMousePoint();

            if (point == mousePosition)
            {
                return false;
            }

            mousePosition = point;

            return true;
        }

        [StructLayout(LayoutKind.Sequential)]
        private struct MPoint
        {
            public int X;

            public int Y;

            public MPoint(int x, int y)
            {
                this.X = x;

                this.Y = y;
            }
        }

        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        private static extern bool GetCursorPos(out MPoint mpt);
        /// <summary>
        /// 获取当前屏幕鼠标位置
        /// </summary>
        /// <returns></returns>
        public static Point GetMousePoint()
        {
            MPoint mpt = new MPoint();

            GetCursorPos(out mpt);

            Point p = new Point(mpt.X, mpt.Y);

            return p;
        }
    }

 然后绑定到该类的事件即可。如下用WPF实现的完整代码:


 判断的类:

public class CheckUsedManager
    {
         public static event EventHandler TimeToFinishedEvent = null;

        private static DispatcherTimer checkUsedTimer = new DispatcherTimer();

        private static Point mousePosition = GetMousePoint();

        static CheckUsedManager()
        {
            checkUsedTimer.Interval = TimeSpan.FromSeconds(ReadConfig.AutoCheckUsedTime);

            checkUsedTimer.Tick += new EventHandler(CheckUsedTimer_Tick);

            checkUsedTimer.Start();
        }

        static void CheckUsedTimer_Tick(object sender, EventArgs e)
        {
            if (!HaveUsedTo())
            {
                if (TimeToFinishedEvent != null)
                {
                    TimeToFinishedEvent(null, null);
                }
            }
        }

        private static bool HaveUsedTo()
        {
            Point point = GetMousePoint();

            if (point == mousePosition)
            {
                return false;
            }

            mousePosition = point;

            return true;
        }

        [StructLayout(LayoutKind.Sequential)]
        private struct MPoint
        {
            public int X;

            public int Y;

            public MPoint(int x, int y)
            {
                this.X = x;

                this.Y = y;
            }
        }

        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        private static extern bool GetCursorPos(out MPoint mpt);
        /// <summary>
        /// 获取当前屏幕鼠标位置
        /// </summary>
        /// <returns></returns>
        public static Point GetMousePoint()
        {
            MPoint mpt = new MPoint();

            GetCursorPos(out mpt);

            Point p = new Point(mpt.X, mpt.Y);

            return p;
        }
    }


读配置里的时间:

   public class ReadConfig
    {
        /// <summary>
        /// 检测是否使用间隔时间
        /// </summary>
        public static int AutoCheckUsedTime
        {
            get
            {
                int time = 10;

                try
                {
                    string timeStr =  ConfigurationManager.AppSettings["AutoCheckUsedTime"];

                    if (string.IsNullOrEmpty(timeStr))
                    {
                        timeStr= "10";
                    }

                    time = int.Parse(timeStr);
                }
                catch { }

                return time;
            }
        }
    }

配置App.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="AutoCheckUsedTime" value="10"/>
  </appSettings>
</configuration>

界面调用:

public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            CheckUsedManager.TimeToFinishedEvent -= new EventHandler(CheckUsedManager_TimeToFinishedEvent);

            CheckUsedManager.TimeToFinishedEvent += new EventHandler(CheckUsedManager_TimeToFinishedEvent);
        }

        void CheckUsedManager_TimeToFinishedEvent(object sender, EventArgs e)
        {
            MessageBox.Show("无人使用!");
        }
    }

结果:

工程代码下载:
http://download.csdn.net/detail/yysyangyangyangshan/5095178

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值