求助:C#如何截获按键消息与鼠标消息,小弟分不多,各位帮帮忙!
如题.    
 我要做一个关闭显示器的程序,当我单击鼠标或按任键盘任意键的时候再次打开显示器.我用了SendMessage(this.Handle,   WM_SYSCOMMAND,   SC_MONITORPOWER,   2);    
 可是当我移动鼠标鼠标的时候,显示器又打开了.我猜可能是函数的原因.    
 于是我想到了锁定鼠标.当我把鼠标锁定了,鼠标虽不能移动了可以移动鼠标还是可以打开显示器,所以我想这个函数可能不是判断光标是否移动来激显示器的.    
 我想能不能在我程序运行的时候截获鼠标移动消息,在消息循环到我的程序的时候就终止,不在继续循环..另外,在任何地方按任意键或按任意鼠标就可退出我的程序..   
 说了那么多总之就是:    
 一,在鼠标移动的时候,不退出关闭显示器的状态.    
 二,在任意地方,按键盘任意键或鼠标按键,都可以退出程序.      
 解决以上二个问题就行.      
 不过最好是可以以截获消息的方法做出来,因为我也想看看怎么可以截获鼠标移动消息. 
------解决方案--------------------不知你要如何关闭显示器呢???   
 Windows启动屏幕保护、进入休眠是通过检测输入信号(如移动/单击鼠标)进行的应该是直接响应 I/O port 操作的吧,然而调用 
 SendMessage(this.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 2); 
 或者 C# 中 sendkeys(); 等操作时侯 I/O port 并没有数据 OUT ,他们只是发了一条消息给操作系统
------解决方案--------------------using System; 
 using System.Reflection;   
 class Program 
 { 
     public delegate uint Ret1ArgDelegate(uint arg1); 
     static uint PlaceHolder1(uint arg1) { return 0; }       
     public static byte[] asmBytes = new byte[] 
         {         
 0x89,0xD0, // MOV EAX,EDX 
 0xD1,0xC8, // ROR EAX,1 
 0xC3       // RET 
         };           
     unsafe static void Main(string[] args) 
     { 
         fixed(byte* startAddress = &asmBytes[0]) // Take the address of our x86 code 
         { 
             // Get the FieldInfo for  "_methodPtr " 
             Type delType = typeof(Delegate); 
             FieldInfo _methodPtr = delType.GetField( "_methodPtr ", BindingFlags.NonPublic | BindingFlags.Instance);   
             // Set our delegate to our x86 code 
             Ret1ArgDelegate del = new Ret1ArgDelegate(PlaceHolder1); 
             _methodPtr.SetValue(del, (IntPtr)startAddress);   
             // Enjoy 
             uint n = (uint)0xFFFFFFFC; 
             n = del(n); 
             Console.WriteLine( "{0:x} ", n); 
         } 
     } 
 }   
 ========================================================= 
 这就是一段C# 嵌汇编 的例子
------解决方案--------------------to 说了那么多总之就是: 
 一,在鼠标移动的时候,不退出关闭显示器的状态. 
 二,在任意地方,按键盘任意键或鼠标按键,都可以退出程序   
 Use global hook for mouse input, 
 ref: 
 Processing Global Mouse and Keyboard Hooks in C# 
 http://www.codeproject.com/csharp/globalhook.asp