C#調用WinApi關閉電腦屏幕含自動監視有無輸入活動檢測

  說到這兒啊,我要吐個槽,做程序的,沒一個不苦逼的.

  閒話少說,開始吧.有人會說,我係統自帶電源管理,我幹嘛,還要自己寫個程序來控制呢,"大哥,你是知道的,做程序的就愛折騰,要麼折騰自己,要麼讓別人來折騰自己,不愛折騰的程序員不是好程序員".

  首先我們要獲取要得到關閉顯示器的方法,.net庫中雖然沒有這個方法,但系統API中肯定是有的三.與非託管代碼交互,"System.Runtime.InteropServices"這個命名空間是少不了的三.

  上代碼了.

        /// <param name="lParam">2 爲關閉顯示器,-1則打開顯示器 </param>
        [DllImport("user32")]
        public static extern IntPtr SendMessage(IntPtr hWnd, uint wMsg, uint wParam, int lParam);

        /// <summary>
        /// 鎖定計算機
        /// </summary>
        [DllImport("user32.dll")]
        public static extern void LockWorkStation();

  第二步,監視鍵盤鼠標.Windows共有14種Hooks,每一種類型的Hook可以使應用程序能夠監視不同類型的系統消息處理機制.這裏只討論鍵盤鼠標鉤子.

  這一步其實也不難,不就是全局勾子嘛,這個鉤子嘛,可不是說人類或動物的屁股哦,簡單的說吧,大家都知道Windows是基於消息的一個操作系統而鉤子可以用來截獲系統中的消息流.爽不爽,想想那些木馬盜號軟件就知道了.

  註冊鉤子

註冊鉤子
 1 /// <summary>
 2          ///  安裝鉤子
 3          /// </summary>
 4          /// <param name="idHook">系統鉤子類型,14爲鼠標鉤子,13爲鍵盤鉤子</param>
 5          /// <param name="lpfn">鉤子回調函數指針,當收到鉤子消息時就執行這個回調函數,回調函數有3個參數,不同類型的鉤子這3個參數有不同的含義</param>
 6          /// <param name="pInstance">應用程序實例的句柄,標識包含lpfn所指的子程的DLL</param>
 7          /// <param name="threadId">與安裝的鉤子子程相關聯的線程的標識符,如果爲0,鉤子子程與所有的線程關聯,即爲全局鉤子</param>
 8          /// <returns></returns>
 9          [DllImport("user32.dll", CallingConvention = CallingConvention.StdCall)]
10          public static extern IntPtr SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr pInstance, int threadId);
11  
12      /// <summary>
13      /// 鉤子委託聲明
14      /// </summary>
15      public delegate int HookProc(int nCode, Int32 wParam, IntPtr lParam);

 

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章