【傻瓜教程】C#監控鎖屏登入
阿新 • • 發佈:2021-01-19
最近做了一個軟體,要用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();
}
然後會一直顯示,未觸發
當你鎖屏之後會記錄下來鎖屏
當你開啟,就會顯示未鎖屏了