2025年3月25日 星期二 甲辰(龙)年 月廿四 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > .net

代码库の全局快捷键

时间:02-11来源:作者:点击数:44

代码库の全局快捷键

  • using System;
  • using System.Collections.Generic;
  • using System.Runtime.InteropServices;
  • using System.Windows.Forms;
  • static class Hotkey
  • {
  • /*注:快捷键是通过消息触发的,因此要重载WndProc函数,
  • * 在里面添加对快捷键回调消息的处理方法Hotkey.ProcessHotKey(m)。
  • * 注意,回调函数(要执行的方法,动作等)不加括号!
  • // protected override void WndProc(ref Message m)
  • // {
  • // base.WndProc(ref m);
  • // Hotkey.ProcessHotKey(m);
  • // }
  • */
  • #region 系统api
  • [DllImport("user32.dll")]
  • [return: MarshalAs(UnmanagedType.Bool)]
  • static extern bool RegisterHotKey(IntPtr hWnd, int id, HotkeyModifiers fsModifiers, Keys vk);
  • [DllImport("user32.dll")]
  • static extern bool UnregisterHotKey(IntPtr hWnd, int id);
  • #endregion
  • /// <summary>
  • /// 注册快捷键
  • /// </summary>
  • /// <param name="hWnd">持有快捷键窗口的句柄</param>
  • /// <param name="fsModifiers">组合键</param>
  • /// <param name="vk">快捷键的虚拟键码</param>
  • /// <param name="callBack">回调函数</param>
  • public static void Regist(IntPtr hWnd, HotkeyModifiers fsModifiers, Keys vk, HotKeyCallBackHanlder callBack)
  • {
  • int id = keyid++;
  • if (!RegisterHotKey(hWnd, id, fsModifiers, vk))
  • throw new Exception("regist hotkey fail.");
  • keymap[id] = callBack;
  • }
  • /// <summary>
  • /// 注销快捷键
  • /// </summary>
  • /// <param name="hWnd">持有快捷键窗口的句柄</param>
  • /// <param name="callBack">回调函数</param>
  • public static void UnRegist(IntPtr hWnd, HotKeyCallBackHanlder callBack)
  • {
  • foreach (KeyValuePair<int, HotKeyCallBackHanlder> var in keymap)
  • {
  • if (var.Value == callBack)
  • UnregisterHotKey(hWnd, var.Key);
  • }
  • }
  • /// <summary>
  • /// 快捷键消息处理
  • /// </summary>
  • public static void ProcessHotKey(System.Windows.Forms.Message m)
  • {
  • if (m.Msg == WM_HOTKEY)
  • {
  • int id = m.WParam.ToInt32();
  • HotKeyCallBackHanlder callback;
  • if (keymap.TryGetValue(id, out callback))
  • {
  • callback();
  • }
  • }
  • }
  • const int WM_HOTKEY = 0x312;
  • static int keyid = 10;
  • static Dictionary<int, HotKeyCallBackHanlder> keymap = new Dictionary<int, HotKeyCallBackHanlder>();
  • public delegate void HotKeyCallBackHanlder();
  • }
  • enum HotkeyModifiers
  • {
  • MOD_ALT = 0x1,
  • MOD_CONTROL = 0x2,
  • MOD_SHIFT = 0x4,
  • MOD_WIN = 0x8
  • }
  • /*附:虚拟键值表附:常用模拟键的键值对照表。
  •                       键盘键与虚拟键码对照表
  •       字母和数字键     数字小键盘的键       功能键         其它键
  •       键   键码     键   键码       键   键码     键      键码
  •       A   65       0   96        F1   112     Backspace    8
  •       B   66       1   97        F2   113     Tab       9
  •       C   67       2   98        F3   114     Clear      12
  •       D   68       3   99        F4   115     Enter      13
  •       E   69       4   100       F5   116     Shift      16
  •       F   70       5   101       F6   117     Control     17
  •       G   71       6   102       F7   118      Alt       18
  •       H   72       7   103       F8   119     Caps Lock    20
  •       I   73       8   104       F9   120     Esc       27
  •       J   74       9   105       F10  121     Spacebar    32
  •       K   75       *   106       F11  122     Page Up     33
  •       L   76       +   107       F12  123     Page Down    34
  •       M   77       Enter 108       --   --     End       35
  •       N   78       -   109       --   --      Home      36
  •       O   79       .   110       --   --      Left Arrow   37
  •       P   80       /   111       --   --      Up Arrow    38
  •       Q   81       --   --       --   --      Right Arrow   39
  •       R   82       --   --       --   --      Down Arrow    40
  •       S   83       --   --       --   --      Insert      45
  •       T   84       --   --       --   --      Delete      46
  •       U   85       --   --       --   --      Help       47
  •       V   86       --   --       --   --      Num Lock     144
  •       W   87          
  •       X   88      
  •       Y   89      
  •       Z   90      
  •       0   48      
  •       1   49      
  •       2   50       
  •       3   51       
  •       4   52       
  •       5   53       
  •       6   54       
  •       7   55       
  •       8   56       
  •       9   57  
  • */

 

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门