1. 程式人生 > 其它 >【傻瓜教程】C#監控鎖屏登入

【傻瓜教程】C#監控鎖屏登入

技術標籤:C#c#

最近做了一個軟體,要用timer查詢當前是否在鎖屏狀態。網上查了很多,最後搞出來了。
網上的程式碼太高深,故這裡做了一個無腦低配解決方案。按此進行就能實現功能,其他的是否有程式碼兀餘,效率是否高,不做討論。

首先,程式開頭新增using如下,很多帖子不寫,還得自己找,累,我這裡絕對方便大眾。
using Microsoft.Win32;

然後是用到的類,這個不是原創,網上抄的,用的時候,直接copy進去用就好了
我還不知道2個public Action怎麼用。
就自己定義了一個public string UnlockOrLock = “未觸發”;///這句是自己的程式碼
我就是想知道當前有沒有鎖屏,大材小用了

 private class SessionSwitchClass
   {
        /// <summary>
        /// 解屏後執行的委託
        /// </summary>
        public Action SessionUnlockAction { get; set; }

        /// <summary>
        /// 鎖屏後執行的委託
        /// </summary>
        public Action SessionLockAction { get; set; }

        public SessionSwitchClass()
        {
            SystemEvents.SessionSwitch += SystemEvents_SessionSwitch;
        }

        //析構,防止控制代碼洩漏
        ~SessionSwitchClass()
        {
            //Do this during application close to avoid handle leak
            SystemEvents.SessionSwitch -= SystemEvents_SessionSwitch;
        }
        public string UnlockOrLock = "未觸發";///這句是自己的程式碼
        //當前登入的使用者變化(登入、登出和解鎖屏)
        public void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e)
        {
            switch (e.Reason)
            {
                //使用者登入
                case SessionSwitchReason.SessionLogon:
                    BeginSessionUnlock();
                    break;
                //解鎖屏
                case SessionSwitchReason.SessionUnlock:
                    BeginSessionUnlock();
                    break;
                //鎖屏
                case SessionSwitchReason.SessionLock:
                    BeginSessionLock();
                    break;
                //登出
                case SessionSwitchReason.SessionLogoff:
                    break;
            }
        }

        /// <summary>
        /// 解屏、登入後執行
        /// </summary>
        private void BeginSessionUnlock()
        {
            //解屏、登入後執行
            UnlockOrLock = "未鎖屏";//自己程式碼
        }

        /// <summary>
        /// 鎖屏後執行
        /// </summary>
        private void BeginSessionLock()
        {
            //鎖屏後執行
            UnlockOrLock = "鎖屏";//自己程式碼
        }
    }

好了怎麼在程式中使用呢?這是很多帖子沒說的,可能對他們來說是基本操作,不需要講,但是對我這種小白來說,基操也是天秀啊。只能自己摸索,現在公佈出來,給各位類似我這種小白,我相信絕對不是少數。
首先,定義一個例項 在 你的主視窗下

 public partial class Form_Main : Form
    {
    		 SessionSwitchClass SessionCheck = new SessionSwitchClass();
    }

然後程式開啟,這個SessionCheck例項就已經在運行了,有鎖屏,就會觸發它。
怎麼確認確實起作用了呢?
做了個Timer

 public Form_Main()
    {
    	int CheckTime=1*15*1000;//(X分鐘*X秒*X毫秒),Timer間隔以毫秒計
        InitializeComponent();
        CheckTimer.Interval = CheckTime;
        CheckTimer.Start();
        TextBoxShow.Text += SessionCheck.UnlockOrLock + "\r\n";
    }

初始化後,開啟timer,顯示未觸發,

 private void CheckTimer_Tick(object sender, EventArgs e)
        {
            CheckTimer.Stop();
            TextBoxCMDShow.Text += SessionCheck.UnlockOrLock + "\r\n";
            CheckTimer.Start();
         }

然後會一直顯示,未觸發
當你鎖屏之後會記錄下來鎖屏
當你開啟,就會顯示未鎖屏了