C# 注册系统热键/快捷键(MainForm HotKey)
作者:C/S框架网  发布日期:2011/06/15 21:35:49
C# 注册系统热键/快捷键(MainForm HotKey)

程序说明: 创建一个MainFormHotKey的类,调用RegisterHotKeys()方法。

C# Code:

using
System;
using System.Windows.Forms;
using System.Collections;
using System.Runtime.InteropServices;

namespace CSFramework.Tech.HotKey
{
   public delegate void HotkeyEventHandler(int HotKeyID);
   
   /// <summary>
   /// 注册热键API函数库
   /// </summary>
   public class Hotkey : System.Windows.Forms.IMessageFilter
   {
      Hashtable keyIDs = new Hashtable();
      IntPtr hWnd;
      
      public event HotkeyEventHandler OnHotkey;
      
      //键类型枚举
      public enum KeyFlags
      {
         MOD_ALT = 0x1,
         MOD_CONTROL = 0x2,
         MOD_SHIFT = 0x4,
         MOD_WIN = 0x8
      }
      
      [DllImport("user32.dll")]
      public static extern UInt32 RegisterHotKey(IntPtr hWnd, UInt32 id, UInt32 fsModifiers, UInt32 vk);
      
      [DllImport("user32.dll")]
      public static extern UInt32 UnregisterHotKey(IntPtr hWnd, UInt32 id);
      
      [DllImport("kernel32.dll")]
      public static extern UInt32 GlobalAddAtom(String lpString);
      
      [DllImport("kernel32.dll")]
      public static extern UInt32 GlobalDeleteAtom(UInt32 nAtom);
      
      public Hotkey(IntPtr hWnd)
      {
         this.hWnd = hWnd;
         System.Windows.Forms.Application.AddMessageFilter(this);
      }
      
      public int RegisterHotkey(System.Windows.Forms.Keys Key, KeyFlags keyflags)
      {
         UInt32 hotkeyid = GlobalAddAtom(System.Guid.NewGuid().ToString());
         RegisterHotKey((IntPtr)hWnd, hotkeyid, (UInt32)keyflags, (UInt32)Key);
         keyIDs.Add(hotkeyid, hotkeyid);
         return (int)hotkeyid;
      }
      
      public void UnregisterHotkeys()
      {
         System.Windows.Forms.Application.RemoveMessageFilter(this);
         foreach (UInt32 key in keyIDs.Values)
         {
            UnregisterHotKey(hWnd, key);
            GlobalDeleteAtom(key);
         }
         keyIDs.Clear();
      }
      
      public bool PreFilterMessage(ref System.Windows.Forms.Message m)
      {
         if (m.Msg == 0x312)
         {
            if (OnHotkey != null)
            {
               foreach (UInt32 key in keyIDs.Values)
               {
                  if ((UInt32)m.WParam == key)
                  {
                     OnHotkey((int)m.WParam);
                     return true;
                  }
               }
            }
         }
         return false;
      }
   }
   
   //注册热键基类
   public class HotKeyRegisterBase
   {
      protected Hotkey _HotKey;
      
      public HotKeyRegisterBase(Form form, HotkeyEventHandler eventHandler)
      {
         _HotKey = new Hotkey(form.Handle);
         _HotKey.OnHotkey += new HotkeyEventHandler(eventHandler);
      }
      
      public virtual void RegisterHotKeys()
      {
      }
      
      public void UnregisterHotKeys()
      {
         _HotKey.UnregisterHotkeys();
      }
      
   }
   
   /// <summary>
   /// 创建主窗体热键
   /// </summary>
   public class MainFormHotKey : HotKeyRegisterBase
   {
      public static int _Alt_D; //delete
      public static int _Alt_I; //insert
      public static int _Alt_E; //modify
      public static int _Alt_N; //new
      public static int _Alt_S; //save
      public static int _Alt_X; //cancel
      public static int _Alt_P; //print
      public static int _Alt_T; //ViewContent
      public static int _F1; //online help
      public static int _F9; //Show current Stock
      
      public MainFormHotKey(Form form, HotkeyEventHandler eventHandler)
      : base(form, eventHandler)
      {
      }
      
      public override void RegisterHotKeys()
      {
         base.RegisterHotKeys();
         _Alt_X = _HotKey.RegisterHotkey(System.Windows.Forms.Keys.Q, Hotkey.KeyFlags.MOD_CONTROL);
         _Alt_D = _HotKey.RegisterHotkey(System.Windows.Forms.Keys.D, Hotkey.KeyFlags.MOD_CONTROL);
         _Alt_I = _HotKey.RegisterHotkey(System.Windows.Forms.Keys.I, Hotkey.KeyFlags.MOD_CONTROL);
         _Alt_E = _HotKey.RegisterHotkey(System.Windows.Forms.Keys.E, Hotkey.KeyFlags.MOD_CONTROL);
         _Alt_N = _HotKey.RegisterHotkey(System.Windows.Forms.Keys.N, Hotkey.KeyFlags.MOD_CONTROL);
         _Alt_S = _HotKey.RegisterHotkey(System.Windows.Forms.Keys.S, Hotkey.KeyFlags.MOD_CONTROL);
         _Alt_P = _HotKey.RegisterHotkey(System.Windows.Forms.Keys.P, Hotkey.KeyFlags.MOD_CONTROL);
         _Alt_T = _HotKey.RegisterHotkey(System.Windows.Forms.Keys.T, Hotkey.KeyFlags.MOD_CONTROL);
         _F1 = _HotKey.RegisterHotkey(System.Windows.Forms.Keys.F1, Hotkey.KeyFlags.MOD_CONTROL);
         _F9 = _HotKey.RegisterHotkey(System.Windows.Forms.Keys.F9, Hotkey.KeyFlags.MOD_CONTROL);
      }
   }
}






上一篇 下一篇