zoukankan      html  css  js  c++  java
  • C#实现快捷键(系统热键)响应

    (1)建立一个类文件,命名为HotKey.cs,代码如下:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Runtime.InteropServices;
     6 using System.Windows.Forms;
     7 
     8 namespace TalentPlayer
     9 {
    10     class HotKey
    11     {
    12         //如果函数执行成功,返回值不为0。
    13         //如果函数执行失败,返回值为0。要得到扩展错误信息,调用GetLastError。
    14         [DllImport("user32.dll", SetLastError = true)]
    15         public static extern bool RegisterHotKey(
    16             IntPtr hWnd,                //要定义热键的窗口的句柄
    17             int id,                     //定义热键ID(不能与其它ID重复)           
    18             KeyModifiers fsModifiers,   //标识热键是否在按Alt、Ctrl、Shift、Windows等键时才会生效
    19             Keys vk                     //定义热键的内容
    20             );
    21 
    22         [DllImport("user32.dll", SetLastError = true)]
    23         public static extern bool UnregisterHotKey(
    24             IntPtr hWnd,                //要取消热键的窗口的句柄
    25             int id                      //要取消热键的ID
    26             );
    27 
    28         //定义了辅助键的名称(将数字转变为字符以便于记忆,也可去除此枚举而直接使用数值)
    29         [Flags()]
    30         public enum KeyModifiers
    31         {
    32             None = 0,
    33             Alt = 1,
    34             Ctrl = 2,
    35             Shift = 4,
    36             WindowsKey = 8
    37         }
    38     }
    39 }

    简单说明一下:

    public static extern bool RegisterHotKey()”这个函数用于注册热键。由于这个函数需要引用user32.dll动态链接库后才能使用,并且
     
    user32.dll是非托管代码,不能用命名空间的方式直接引用,所以需要用“DllImport”进行引入后才能使用。于是在函数前面需要加上
     
    “[DllImport("user32.dll", SetLastError = true)]”这行语句。
    public static extern bool UnregisterHotKey()”这个函数用于注销热键,同理也需要用DllImport引用user32.dll后才能使用。
    public enum KeyModifiers{}”定义了一组枚举,将辅助键的数字代码直接表示为文字,以方便使用。这样在调用时我们不必记住每一个辅
     
    助键的代码而只需直接选择其名称即可。
     
    (2)以窗体Form2为例,介绍HotKey类的使用
     1 using System;
     2 using System.Collections.Generic;
     3 using System.ComponentModel;
     4 using System.Data;
     5 using System.Drawing;
     6 using System.Linq;
     7 using System.Text;
     8 using System.Windows.Forms;
     9 
    10 namespace TalentPlayer
    11 {
    12     public partial class Form2 : Form
    13     {
    14         public Form2()
    15         {
    16             InitializeComponent();
    17         }
    18         //在FormA的Activate事件中注册热键,本例中注册Shift+S,Ctrl+Z,Alt+D这三个热键。这里的Id号可任意设置
    19         private void Form2_Activated(object sender, EventArgs e)
    20         {
    21             //注册热键Shift+S,Id号为100。HotKey.KeyModifiers.Shift也可以直接使用数字4来表示。
    22             HotKey.RegisterHotKey(Handle, 100, 0, Keys.Left);
    23             //注册热键Ctrl+B,Id号为101。HotKey.KeyModifiers.Ctrl也可以直接使用数字2来表示。
    24             HotKey.RegisterHotKey(Handle, 101, 0, Keys.Right);
    25             //注册热键Alt+D,Id号为102。HotKey.KeyModifiers.Alt也可以直接使用数字1来表示。
    26             HotKey.RegisterHotKey(Handle, 102, HotKey.KeyModifiers.Alt, Keys.D);
    27         }
    28         //在FormA的Leave事件中注销热键。
    29         private void Form2_Leave(object sender, EventArgs e)
    30         {
    31             //注销Id号为100的热键设定
    32             HotKey.UnregisterHotKey(Handle, 100);
    33             //注销Id号为101的热键设定
    34             HotKey.UnregisterHotKey(Handle, 101);
    35             //注销Id号为102的热键设定
    36             HotKey.UnregisterHotKey(Handle, 102);
    37         }
    38         ///重载FromA中的WndProc函数
    39         /// 
    40         /// 监视Windows消息
    41         /// 重载WndProc方法,用于实现热键响应
    42         /// 
    43         /// 
    44         protected override void WndProc(ref Message m)
    45         {
    46             const int WM_HOTKEY = 0x0312;
    47             //按快捷键 
    48             switch (m.Msg)
    49             {
    50                 case WM_HOTKEY:
    51                     switch (m.WParam.ToInt32())
    52                     {
    53                         case 100:    //按下的是Shift+S
    54                             MessageBox.Show("1");    
    55                             break;
    56                         case 101:    //按下的是Ctrl+B
    57                             //此处填写快捷键响应代码
    58                             MessageBox.Show("2");    
    59                             break;
    60                         case 102:    //按下的是Alt+D
    61                             //此处填写快捷键响应代码
    62                             break;
    63                     }
    64                     break;
    65             }
    66             base.WndProc(ref m);
    67         }
    68     }
    69 }
  • 相关阅读:
    select、poll和epoll
    Linux 常用命令之文件和目录
    SmartPlant Review 帮助文档机翻做培训手册
    SmartPlant Foundation 基础教程 3.4 菜单栏
    SmartPlant Foundation 基础教程 3.3 标题栏
    SmartPlant Foundation 基础教程 3.2 界面布局
    SmartPlant Foundation 基础教程 3.1 DTC登陆界面
    SmartPlant Foundation 基础教程 1.4 SPF架构
    SmartPlant Foundation 基础教程 1.3 SPF其他功能
    SmartPlant Foundation 基础教程 1.2 SPF集成设计功能
  • 原文地址:https://www.cnblogs.com/pyffcwj/p/3335157.html
Copyright © 2011-2022 走看看