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);

 

  

posted on 2012-10-12 17:41  江小花儿  阅读(1672)  评论(0编辑  收藏  举报