为程序设置快捷键

简介: 代码 注册系统热键 using System;using System.Runtime.InteropServices;using System.Windows.Forms;namespace Utility.
img_405b18b4b6584ae338e0f6ecaf736533.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时注册热键

 

img_405b18b4b6584ae338e0f6ecaf736533.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方法

 

img_405b18b4b6584ae338e0f6ecaf736533.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了。 

 

目录
相关文章
|
6月前
vscode 向下复制当前行功能快捷键 设置成Ctrl + D
vscode 向下复制当前行功能快捷键 设置成Ctrl + D
279 0
vscode ctrl+/ 注释快捷键失效
首次安装vscode 不知道为何会快捷键失效,首先想到的就是键位冲突! 于是解决了。
4545 0
vscode ctrl+/ 注释快捷键失效
如何方法vscode窗口,快速升级本屏,多屏,ctrl + \,Ctrl+Shift+P,命令提示窗
如何方法vscode窗口,快速升级本屏,多屏,ctrl + \,Ctrl+Shift+P,命令提示窗
|
6月前
个人建议:VSCode和WebStorm中的“关闭其他所有编辑器、关闭左侧编辑器、关闭右侧编辑器”快捷键这么设置shift+alt+w、shift+alt+[、shift+alt+],你会受益匪浅
个人建议:VSCode和WebStorm中的“关闭其他所有编辑器、关闭左侧编辑器、关闭右侧编辑器”快捷键这么设置shift+alt+w、shift+alt+[、shift+alt+],你会受益匪浅
|
6月前
设置VSCode终端命令行清除快捷键Ctrl+K或Ctrl+L
设置VSCode终端命令行清除快捷键Ctrl+K或Ctrl+L
|
6月前
设置WebStorm查看本地源码文件个人修改的历史记录快捷键Alt+Shift+H、Ctrl+Shift+H(通常用于调试bug,发现文件出问题需要回溯到若干天之前)
设置WebStorm查看本地源码文件个人修改的历史记录快捷键Alt+Shift+H、Ctrl+Shift+H(通常用于调试bug,发现文件出问题需要回溯到若干天之前)
|
6月前
【冷门快捷键】设置VSCode终端大小最小化快捷键Alt+PageUp/PageDown、编辑代码窗口切换大小快捷键Alt+数字键盘“+”、Alt+数字键盘“-”、Alt+数字键盘“0”
【冷门快捷键】设置VSCode终端大小最小化快捷键Alt+PageUp/PageDown、编辑代码窗口切换大小快捷键Alt+数字键盘“+”、Alt+数字键盘“-”、Alt+数字键盘“0”
|
C++
vs快捷键与vs自定义快捷键
vs快捷键与vs自定义快捷键
348 0
|
Android开发
idea2021.2设置eclipse快捷键后提取变量快捷键Alt+shift+L失效
如下图,搜索var,这个快捷键是有配置的,右键删除再添加就会提示你还有其他地方使用这个快捷键,点确认删除就可以了