WPF窗口長時間無人操做鼠標自動隱藏

在軟件開發中有時會有等待一段時間無人操做後隱藏鼠標,可能緣由大體以下:html

1.爲了安全性,特別是那些須要用到用戶名和密碼登陸服務端的程序,經常考慮長期無人操做,程序自動跳轉到用戶登陸界面;安全

2.軟件爲了更好的播放效果,須要隱藏鼠標。ide

這裏寫的是第二種狀況,wpf作播放時,須要隱藏鼠標。this

思路是:假如3s鼠標不動則隱藏,設計了計時器的間隔時間爲1s,並添加鼠標沒移動的計數器,計數器達到3才執行程序。實現是這樣的:每隔1s檢測鼠標是否移動,若是不移動則計數器加1,若是中途鼠標移動,則計數器清零,要達到計數器計數爲3,則要3次鼠標檢測中鼠標都不移動,這樣從鼠標中止移動,到計數器達到3,恰好是3s,可以達到3s鼠標不動則隱藏程序執行;spa

1、封裝好的監視鼠標移動的類文件:設計

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Runtime.InteropServices;

namespace EBS.Common {
    public class MouseMonitorHelper {
        private static Point mousePosition;    //鼠標的位置
        public static int CheckCount;   //檢測鼠標位置的次數

        //判斷鼠標是否移動        
        public 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);

        // 獲取當前屏幕鼠標位置           
        public static Point GetMousePoint() {
            MPoint mpt = new MPoint();
            GetCursorPos(out mpt);
            Point p = new Point(mpt.X, mpt.Y);
            return p;
        }
    }
}
View Code


 

2、程序中調用Timer事件:code

private DispatcherTimer Timer_MouseMove;

private void Window_Loaded(object sender, RoutedEventArgs e) {
            // 設置鼠標隱藏、顯示
            this.Timer_MouseMove = new DispatcherTimer();
            this.Timer_MouseMove.Tick +=new EventHandler(Timer_MouseMove_Tick);
            this.Timer_MouseMove.Interval = new TimeSpan(0, 0, 1);
            this.Timer_MouseMove.Start();
        }


private void Timer_MouseMove_Tick(object sender, EventArgs e) {
            try {
                if (!MouseMonitorHelper.HaveUsedTo()) {
                    MouseMonitorHelper.CheckCount++;
                    if (MouseMonitorHelper.CheckCount == 3) {
                        MouseMonitorHelper.CheckCount = 0;
                        // 關閉按鈕隱藏、鼠標隱藏
                        this.cnsExist.Visibility = Visibility.Hidden;
                        Mouse.OverrideCursor = Cursors.None;
                    }
                } else MouseMonitorHelper.CheckCount = 0;
            } catch {
                throw new NotImplementedException();
            }
        }


private void DockPanel_MouseMove(object sender, MouseEventArgs e) {
            this.cnsExist.Visibility = Visibility.Visible;
            Mouse.OverrideCursor = Cursors.Arrow;
View Code


另外若是有設計到鼠標焦點的狀況,請參考WPF程序長時間無人操做htm

相關文章
相關標籤/搜索