求助:拦截系统消息
求助:我想要拦截系统的按键消息。想要屏蔽SHIFT+方向键,具体消息代码是多少不知道,也没有找到这个消息列表
C# WINFORM
现在用一个LISTVIEW控件,它自带一个热键,SHIFT+上下,是多选用的。但是现在这个热键我想要干别的用。不想让这个消息走到控件这一步。  
现在找到之前见到的一段代码,这个是屏蔽了系统的关闭窗体的消息。我想用同样的方式做,但是不知道SHIFT+  方向键的消息该如何写判断。
         protected override void WndProc(ref   Message m)
         {
             const int WM_SYSCOMMAND = 0x0112;
             const int SC_CLOSE = 0xF060;
             if (m.Msg == WM_SYSCOMMAND && (int)m.WParam == SC_CLOSE)
             {
                 return;
             }
             base.WndProc(ref m);
         }
另外还看到这样的代码,消息过滤器。但是写好类了不知道怎么用。看了网上的文字,很糊涂。求解!
  internal class MessageFilter : IMessageFilter  
     {
         public virtual bool PreFilterMessage(ref Message m)    
         {  
             //if里根据自己的需要进行判断判断 m.HWnd为控件句柄  m.Msg为消息ID      
             if (true)  
             {
                 //返回值为true, 表示消息已被处理,不要再往后传递,因此消息被截获      
                 return true;
             }
             //返回值为false,表示消息未被处理,需要再往后传递,因此消息未被截获       
             return false;   
         }       
         public void AddThisMessageFilter()   
         {  
             //添加该消息筛选器      
             Application.AddMessageFilter(this);
         }    
         public void RemoveThisMessageFilter()    
         {            //移除该消息筛选器       
             Application.RemoveMessageFilter(this);   
         }  
     }
有资料不会用,真是郁闷。希望能帮忙的写的详细一些。。我没啥基础。。。
------解决方案--------------------WindowsAPI 最大的特点就是 没有中文翻译(似乎也没有发现管发布过什么API手册之类的。。。只有英文的那些东东...)
你只能去msdn 查英文资料了
不过。。。
当然也有捷径 ,就是谷歌 搜索 。。。
------解决方案--------------------if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift)判断是否按下shift键,然后在判断方向键
------解决方案--------------------截获键盘的消息,碰到时Shift+上下就做你自己的事。
------解决方案--------------------http://www.cnblogs.com/heimirror/archive/2010/03/29/1699857.html
------解决方案--------------------http://www.cnblogs.com/heimirror/archive/2010/03/29/1699857.html
------解决方案--------------------Application.AddMessageFilter(IMessageFilter)
------解决方案--------------------因为消息被派送到TextBox句柄上了而TextBox并没有重写WinProc,重写TextBox的WinProc就可以拦截到了
------解决方案--------------------试试通过把windowform的keypreview属性打开,捕获keydown事件进行处理。
------解决方案--------------------你通过Debug.Write(m.Msg)你会发现键盘消息在你说的那种情况下是无法让窗体捕获的。
所以建议你通过把windowform的keypreview属性打开,捕获keydown事件进行处理。  
------解决方案--------------------
WM_KEYDOWN和WM_KEYUP的 wParam就是虚拟键码,MSDN上可以查到,也可以通过VkKeyScan将一个字符转换成虚拟键码和shift状态的结合。
lParam的0到15位为该键在键盘上的重复次数,经常设为1,即按键1次;16至23位为键盘的扫描码,通过MapVirtualKey配合其参数可以得到;24位为扩展键,即某些右ALT和CTRL;29、30、31位按照说明设置即可(第30位对于keydown在和shift等结合的时候通常要设置为1)。  
Specification of WM_KEYDOWN:
wParam
   Specifies the virtual-key code of the nonsystem key.  
lParam
   Specifies the repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag, as shown in the following table.