最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#實(shí)現(xiàn)電腦鎖屏功能的方式

 更新時間:2025年12月07日 08:26:53   作者:yue008  
本文介紹了如何在Winform軟件中實(shí)現(xiàn)鎖屏功能,包括操作界面、鎖屏界面和解鎖界面的設(shè)計,以及使用鉤子機(jī)制、泛型集合、Process類和Cursor類等技術(shù)來實(shí)現(xiàn)具體功能,需要的朋友可以參考下

在進(jìn)行winform軟件開發(fā)時,需要實(shí)現(xiàn)鎖屏功能。本文就主要介紹此功能實(shí)現(xiàn)方式。

實(shí)現(xiàn)思路

  • 此功能分三個界面,分別是操作界面、鎖屏界面、解鎖界面
  • 操作員在操作界面輸入鎖屏密碼,并啟動鎖屏功能。鎖屏界面顯示
  • 解鎖時,操作員點(diǎn)擊鎖屏界面,解鎖界面顯示,操作員輸入解鎖密碼,鎖屏界面關(guān)閉,主畫面顯示

知識點(diǎn)

鉤子機(jī)制

鉤子是Windows操作系統(tǒng)提供的消息處理機(jī)制平臺,應(yīng)用程序可通過設(shè)置回調(diào)函數(shù)監(jiān)視指定窗口消息,鉤子可在消息到達(dá)目標(biāo)窗口前捕獲鍵盤、鼠標(biāo)等輸入事件,處理函數(shù)可修改消息內(nèi)容或終止傳遞流程,可以理解為監(jiān)視窗口和鍵盤、鼠標(biāo)等動作,并根據(jù)此動作,執(zhí)行其他功能,比如屏蔽鍵盤、記錄鍵盤按下、窗體關(guān)閉等。實(shí)現(xiàn)代碼如下:

 private IntPtr pKeyboardHook = IntPtr.Zero;//鍵盤鉤子句柄
 //鉤子委托聲明
 public delegate int HookProc(int nCode, Int32 wParam, IntPtr lParam);
 private HookProc KeyboardHookProcedure;//鍵盤鉤子委托實(shí)例,不能省略變量
 public const int idHook = 13;//底層鍵盤鉤子
 //安裝鉤子
 [DllImport("user32.dll", CallingConvention = CallingConvention.StdCall)]
 public static extern IntPtr SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr pInstance, int threadID);
 //卸載鉤子
 [DllImport("user32.dll", CallingConvention = CallingConvention.StdCall)]
 public static extern bool UnhookWindowsHookEx(IntPtr pHookHandle);

 //鍵盤鉤子處理函數(shù)
 private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam)
 {
     KeyMSG m = (KeyMSG)Marshal.PtrToStructure(lParam, typeof(KeyMSG));//鍵盤消息處理
     if (pKeyboardHook != IntPtr.Zero)//判斷鉤子句柄是否為空
     {
         switch (((Keys)m.vkCode))//判斷按鍵
         {
             case Keys.LWin://鍵盤左側(cè)的Win鍵
             case Keys.RWin://鍵盤右側(cè)的Win鍵
             case Keys.Delete://Delete鍵
             case Keys.Alt://Alt鍵
             case Keys.Escape: //Esc鍵
             case Keys.F4: //F4鍵
             case Keys.Control://Ctrl鍵
             case Keys.Tab://Tab鍵
                 return 1;//不執(zhí)行任何操作
         }
     }
     return 0;
 }
 //安裝鉤子方法
 public bool InsertHook()
 {
     IntPtr pIn = (IntPtr)4194304;//將4194304轉(zhuǎn)換為句柄
     if (this.pKeyboardHook == IntPtr.Zero)//不存在鉤子時
     {
         //創(chuàng)建鉤子
         this.KeyboardHookProcedure = new HookProc(KeyboardHookProc);
         //使用SetWindowsHookEx函數(shù)安裝鉤子
         this.pKeyboardHook = SetWindowsHookEx(idHook, KeyboardHookProcedure, pIn, 0);
         if (this.pKeyboardHook == IntPtr.Zero)//如果安裝鉤子失敗
         {
             this.UnInsertHook();//卸載鉤子
             return false;
         }
     }
     return true;
 }
 //卸載鉤子方法
 public bool UnInsertHook()
 {
     bool result = true;
     if (this.pKeyboardHook != IntPtr.Zero)//如果存在鉤子
     {
         //使用UnhookWindowsHookEx函數(shù)卸載鉤子
         result = (UnhookWindowsHookEx(this.pKeyboardHook) && result);
         this.pKeyboardHook = IntPtr.Zero;//清空指針
     }
     return result;
 }
 //鍵盤消息處理結(jié)構(gòu)
 [StructLayout(LayoutKind.Sequential)]
 public struct KeyMSG
 {
     public int vkCode;//鍵盤按鍵
 }

泛型集合

List 本功能用到泛型集合,在鎖屏功能中作用是將所有的窗體保存到集合中,然后解鎖后,全部關(guān)閉,避免出現(xiàn)窗體未全部關(guān)閉。并且此泛型集合作為全局靜態(tài)變量。

public static List<Form> listforms = new List<Form>();//窗體集合,主要用來在鎖屏及解鎖時使用

Process

由于winform是基于windows系統(tǒng)開發(fā)的,在鎖屏階段,為避免通過熱鍵等其他方式繞過鎖屏功能,需要定時監(jiān)督windows系統(tǒng)進(jìn)程,確保在鎖屏階段,windows系統(tǒng)無法執(zhí)行其他操作。
關(guān)于Process,本文只介紹進(jìn)程的啟動和關(guān)閉。詳細(xì)功能可參考官方文檔。

using System;
using System.Diagnostics;

class Program
{
static void Main()
{
//啟動notepad
Process process = Process.Start("notepad.exe");
System.Threading.Thread.Sleep(2000); // 等待2秒
process.Kill();//關(guān)閉notepad
}
}

Cursor

代表用于繪制鼠標(biāo)指針的圖像。
本文主要介紹Cursor的屬性Clip:
獲取或設(shè)置表示光標(biāo)的剪輯矩形的邊界。

Cursor.Clip = new Rectangle(x, y, size.Width, size.Height);//設(shè)置鼠標(biāo)指針的邊界

作用主要是當(dāng)開始解鎖時,限制鼠標(biāo)活動范圍只在解鎖界面。

size

存儲一個有序整數(shù)對,用于指定 Height 和 Width。

Cursor.Clip = new Rectangle(x, y, size.Width, size.Height);//設(shè)置鼠標(biāo)指針的邊界

窗體數(shù)據(jù)傳送

在進(jìn)行winform開發(fā)時,會需要將數(shù)據(jù)通過窗體傳遞,其傳遞機(jī)制為:
假定有窗體A和窗體B,現(xiàn)在需要將窗體A的數(shù)據(jù)傳遞給窗體B

  • 在窗體B定義公共變量,tagA和TagB
  • 在窗體A引用窗體B的兩個變量,并將數(shù)據(jù)發(fā)送給這兩個變量
    其實(shí)也可以加載事件。

關(guān)鍵代碼

窗體A:鎖屏操作界面

 Frm_LScreen Frm_LScreen = new Frm_LScreen();

 private void button1_Click(object sender, EventArgs e)
 {
     if(textBox2.Text.Trim()== ""||textBox3.Text.Trim() =="")
     {
         MessageBox.Show("請輸入鎖屏密碼!", "系統(tǒng)提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
         return;
     }
     else
     {
         if(textBox2.Text.Trim()==textBox3.Text.Trim())
         {
             Frm_LScreen.size = this.Size;//
             Frm_LScreen.x = this.Location.X;
             Frm_LScreen.y = this.Location.Y;
             Frm_LScreen.infos = textBox1.Text.Trim();
             Frm_LScreen.pwd = textBox2.Text.Trim();
             this.Hide();
             Operator.listforms.Add(Frm_LScreen);
             Frm_LScreen.ShowDialog();
         }
         else
         {
             MessageBox.Show("輸入的兩次密碼不一致", "系統(tǒng)提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
             return;
         }
     }
 }

 private void button2_Click(object sender, EventArgs e)
 {
     this.Close();
 }

 private void textBox3_KeyPress(object sender, KeyPressEventArgs e)
 {
     if(e.KeyChar==13)
     {
         button1.Focus();
     }
 }

窗體2:鎖屏界面

  #region  公共變量
  public Size size;//記錄窗體的大小
  public int x;
  public int y;
  public string infos;
  public string pwd;
  MyHook myHook=new MyHook ();
  #endregion

  private void Frm_LScreen_Load(object sender, EventArgs e)
  {
      label1.Location = new Point(x, y - 50);
      label1.Text = infos;
      base.Opacity = 0.5;//設(shè)置窗體透明度
      myHook.InsertHook();//安裝鉤子,記錄輸入鎖屏密碼
  }

  private void Frm_LScreen_MouseMove(object sender, MouseEventArgs e)
  {
      Cursor.Clip = new Rectangle(x, y, size.Width, size.Height);//設(shè)置鼠標(biāo)指針的邊界
  }

  private void Frm_LScreen_MouseClick(object sender, MouseEventArgs e)
  {
      Frm_UnLock frm_UnLock = new Frm_UnLock();
      frm_UnLock.x = x;
      frm_UnLock.y = y;
      frm_UnLock.infos = infos;
      frm_UnLock.pwd = pwd;
      Operator.listforms.Add(frm_UnLock);
      frm_UnLock.ShowDialog();
  }

  private void timer1_Tick(object sender, EventArgs e)
  {
      Process[] processes = Process.GetProcesses();//獲取運(yùn)行的所有進(jìn)程名
      foreach(Process p in processes)
      {
          try
          {
              if(p.ProcessName.ToLower().Trim()=="taskmgr")
              {
                  p.Kill();//停止進(jìn)程
                  Cursor.Clip = new Rectangle(x, y, size.Width, size.Height);
                  return;
              }
          }
          catch
          {
              return;
          }
      }
  }

  private void Frm_LScreen_FormClosing(object sender, FormClosingEventArgs e)
  {
      myHook.UnInsertHook();//卸載鉤子,解鎖屏幕
      timer1.Stop();
  }

窗體3:解鎖界面

 #region  公共變量
 public int x;
 public int y;
 public string infos;
 public string pwd;
 #endregion

 private void Frm_UnLock_Load(object sender, EventArgs e)
 {
     this.TopMost = true;
     this.Location=new Point(x, y);
     label1.Text = infos;
 }

 private void button1_Click(object sender, EventArgs e)
 {
     if(textBox1.Text==pwd)
     {
         foreach(Form item in Operator.listforms)
         {
             item.Close();
             item.Dispose();
         }
         this.Close();
     }
     else
     {
         label1.Text = "密碼輸入錯誤,請重新輸入";
     }
 }

 private void button2_Click(object sender, EventArgs e)
 {
     this.TopMost=false;
     this.Close();
 }

到此這篇關(guān)于C#實(shí)現(xiàn)電腦鎖屏功能的方式的文章就介紹到這了,更多相關(guān)C#電腦鎖屏功能內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#之關(guān)于Base64簡單加密與解密方式

    C#之關(guān)于Base64簡單加密與解密方式

    這篇文章主要介紹了C#之關(guān)于Base64簡單加密與解密方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • c# 獲取機(jī)器唯一識別碼的示例

    c# 獲取機(jī)器唯一識別碼的示例

    這篇文章主要介紹了c# 獲取機(jī)器唯一識別碼的示例,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-03-03
  • asp.net之生成驗(yàn)證碼的方法集錦(一)

    asp.net之生成驗(yàn)證碼的方法集錦(一)

    現(xiàn)在很多網(wǎng)站都有注冊登錄的頁面,為了更好的滿足用戶體驗(yàn)和網(wǎng)站的安全性,很多網(wǎng)站都采用動態(tài)生成的圖形碼或者是附加碼進(jìn)行驗(yàn)證,這篇文章主要就是介紹生成驗(yàn)證碼的方法,需要的朋友可以參考下
    2015-08-08
  • C#環(huán)形緩沖區(qū)(隊(duì)列)完全實(shí)現(xiàn)

    C#環(huán)形緩沖區(qū)(隊(duì)列)完全實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了C#環(huán)形緩沖區(qū)(隊(duì)列)完全實(shí)現(xiàn)代碼,感興趣的小伙伴們可以參考一下
    2016-07-07
  • C#?VB.NET?將Html轉(zhuǎn)為Excel

    C#?VB.NET?將Html轉(zhuǎn)為Excel

    本文介紹通過C#和VB.NET代碼展示將Html轉(zhuǎn)為Excel文檔的方法。文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C#有一定幫助,感興趣的小伙伴可以了解一下
    2022-03-03
  • C# 利用PdfSharp生成Pdf文件的示例

    C# 利用PdfSharp生成Pdf文件的示例

    這篇文章主要介紹了C# 利用PdfSharp生成Pdf文件的示例,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-04-04
  • C# winform主界面打開并關(guān)閉登錄界面的方法

    C# winform主界面打開并關(guān)閉登錄界面的方法

    這篇文章主要介紹了C# winform主界面打開并關(guān)閉登錄界面的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • PowerShell 定時執(zhí)行.Net(C#)程序的方法

    PowerShell 定時執(zhí)行.Net(C#)程序的方法

    利用PowerShell可以調(diào)用動態(tài)頁面,然后再用 .bat 執(zhí)行 PowerShell 腳本,最后把 .bat 添加到服務(wù)器的任務(wù)計劃里面。OK,所有操作都做好了,.Net 定時執(zhí)行了,是不是呢,有木有呢。
    2013-04-04
  • C#實(shí)現(xiàn)簡易的加密、解密字符串工具類實(shí)例

    C#實(shí)現(xiàn)簡易的加密、解密字符串工具類實(shí)例

    這篇文章主要介紹了C#實(shí)現(xiàn)簡易的加密、解密字符串工具類,涉及C#字符串加密與加密的實(shí)現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • C# OpenVINO實(shí)現(xiàn)圖片旋轉(zhuǎn)角度檢測

    C# OpenVINO實(shí)現(xiàn)圖片旋轉(zhuǎn)角度檢測

    這篇文章主要為大家詳細(xì)介紹了C#?OpenVINO如何實(shí)現(xiàn)圖片旋轉(zhuǎn)角度檢測,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02

最新評論

五指山市| 康保县| 昔阳县| 曲阳县| 泰宁县| 即墨市| 个旧市| 阿合奇县| 沭阳县| 四川省| 雅安市| 长阳| 漠河县| 亳州市| 常德市| 将乐县| 霍州市| 秦安县| 昭觉县| 南华县| 六枝特区| 昌都县| 齐河县| 海林市| 任丘市| 皮山县| 天柱县| 抚州市| 同江市| 岚皋县| 古丈县| 洪泽县| 克拉玛依市| 双流县| 张家川| 咸丰县| 米泉市| 阳江市| 长岭县| 柳州市| 巴马|