为程序设置快捷键

ExpandedBlockStart.gif 代码
注册系统热键 
using  System;
using  System.Runtime.InteropServices;
using  System.Windows.Forms;

namespace  Utility.Form
{
    
public   class  HotKey
    {
        
///   <summary>
        
///  注册系统热键
        
///   </summary>
        
///   <example> 注册后,按如下方法重写WndProc方法,写入快捷键的作用
        
///   <code>
        
///  protected override void WndProc(ref Message m)
        
/// {
        
///     switch (m.Msg)
        
///     {
        
///         case 0x0312: //表示按快捷键
        
///             switch (m.WParam.ToInt32())
        
///             {
        
///                 case 100:
        
///                     //do something
        
///                     break;
        
///                 default:
        
///                     break;
        
///              }
        
///          break;
        
///    }
        
///   base.WndProc(ref m);
        
/// }
        
///   </code>
        
///   </example>
        
///   <param name="hWnd"> Handle </param>
        
///   <param name="id"> ID,不重复即可 </param>
        
///   <param name="fsModifiers"></param>
        
///   <param name="vk"></param>
        
///   <returns> 如果函数执行成功,返回值不为0。如果函数执行失败,返回值为0。要得到扩展错误信息,调用GetLastError。 </returns>
        [DllImport( " user32.dll " , SetLastError  =   true )]
        
public   static   extern   bool  RegisterHotKey(
            IntPtr hWnd,                
// 要定义热键的窗口的句柄   
             int  id,                      // 定义热键ID(不能与其它ID重复)              
            KeyModifiers fsModifiers,    // 标识热键是否在按Alt、Ctrl、Shift、Windows等键时才会生效   
            Keys vk                      // 定义热键的内容   
            );
        
///   <summary>
        
///  取消注册系统热键
        
///   </summary>
        
///   <param name="hWnd"> Handle </param>
        
///   <param name="id"> ID </param>
        
///   <returns> 取消是否成功 </returns>
        [DllImport( " user32.dll " , SetLastError  =   true )]
        
public   static   extern   bool  UnregisterHotKey(
            IntPtr hWnd,                
// 要取消热键的窗口的句柄   
             int  id                       // 要取消热键的ID   
            );

        
///   <summary>
        
///  定义了辅助键的名称(将数字转变为字符以便于记忆,也可去除此枚举而直接使用数值)
        
///   </summary>
        [Flags()]
        
public   enum  KeyModifiers
        {
            None 
=   0 ,
            Alt 
=   1 ,
            Ctrl 
=   2 ,
            Shift 
=   4 ,
            WindowsKey 
=   8
        }
    }
}

这个在网上一搜,到处都是,我在窗体show时注册热键

 

ExpandedBlockStart.gif 代码
            Utility.Form.HotKey.RegisterHotKey(Handle,  101 , Utility.Form.HotKey.KeyModifiers.None, Keys.F1);
            Utility.Form.HotKey.RegisterHotKey(Handle, 
102 , Utility.Form.HotKey.KeyModifiers.None, Keys.F2);
            Utility.Form.HotKey.RegisterHotKey(Handle, 
103 , Utility.Form.HotKey.KeyModifiers.Alt, Keys.A);

 

并且窗体重写WndProc方法

 

ExpandedBlockStart.gif 代码
protected   override   void  WndProc( ref  Message m)
        {
            
base .WndProc( ref  m);
            
switch  (m.Msg)
            {
                
case   0x0312 // 表示按快捷键
                     switch  (m.WParam.ToInt32())
                    {
                        
case   101 :
                            
// ...
                             break ;
                        
case   102 :
                            
// ...
                             break ;
                        
case   103 :
                            
// ...
                             break ;
                        
default :
                            
break ;
                    }
                    
break ;
            }
        }

 

发现已经可以使用了,但是F1,F2这些热键是系统中也要用的,一旦你的程序启动,发现其它程序的这些快捷键已经不起作用了。所以应该在窗体有焦点时才注册,离开焦点时要取消注册,也就是说在Form的Activated方法里注册,而在Deactivate时取消注册就OK了。 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值