說到這兒啊,我要吐個槽,做程序的,沒一個不苦逼的.
閒話少說,開始吧.有人會說,我係統自帶電源管理,我幹嘛,還要自己寫個程序來控制呢,"大哥,你是知道的,做程序的就愛折騰,要麼折騰自己,要麼讓別人來折騰自己,不愛折騰的程序員不是好程序員".
首先我們要獲取要得到關閉顯示器的方法,.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);