Winform 多组合老板键Alt_Ctrl_Shift

简介:

某天,为了给微博粉丝精灵增加个老板键功能,找一惯的方式,开始从网络下手寻找: 关键字类似”C# 老板键“,一搜,一堆又一堆,然而出来的代码,基本上都是一个样的:

 

正常来说,老板键一般少不了:Alt+Ctrl+Shift+XX这种多组合方式,然而各类代码就是不直接说明,也没个提示,看来是有意隐藏,终于,还是被我发现其中的一些不为人知的隐藏属性:

 

下面看一下本人修改自网络常见的代码:

 

复制代码
public  delegate  void HotkeyEventHandler( int HotKeyID);

     public  class SystemHotKey : System.Windows.Forms.IMessageFilter
    {
        List<UInt32> keyIDs =  new List<UInt32>();
        IntPtr hWnd;

         public  event HotkeyEventHandler OnHotkey;

         public  enum KeyFlags
        {
            Alt =  0x1,
            Ctrl =  0x2,
            Shift =  0x4,
            Win =  0x8,
             // 组合键等于值相加
            Alt_Ctrl =  0x3,
            Alt_Shift =  0x5,
            Ctrl_Shift =  0x6,
            Alt_Ctrl_Shift =  0x7
        }
        [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 SystemHotKey(IntPtr hWnd)
        {
             this.hWnd = hWnd;
        }

         public  int RegisterHotkey(KeyFlags keyflags, System.Windows.Forms.Keys Key)
        {
            System.Windows.Forms.Application.AddMessageFilter( this);
            UInt32 hotkeyid = GlobalAddAtom(System.Guid.NewGuid().ToString());
            RegisterHotKey((IntPtr)hWnd, hotkeyid, (UInt32)keyflags, (UInt32)Key);
            keyIDs.Add(hotkeyid);
             return ( int)hotkeyid;
        }

         public  void UnregisterHotkeys()
        {
             if (keyIDs.Count >  0)
            {

                System.Windows.Forms.Application.RemoveMessageFilter( this);
                 foreach (UInt32 key  in keyIDs)
                {
                    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)
                    {
                         if ((UInt32)m.WParam == key)
                        {
                            OnHotkey(( int)m.WParam);
                             return  true;
                        }
                    }
                }
            }
             return  false;
        }
    }
复制代码
 

以上有几个要点说一下:

 

1:System.Windows.Forms.Application.AddMessageFilter(this);这句需要对应System.Windows.Forms.Application.RemoveMessageFilter(this);这里用完要记得取消。
由于原来的程序,只在构造函数里添加,所以取消后,再设置就会失效了,这里直接在注册的时候给加上,取消时去掉,注意下这个效果即可。
 

2:热键的组合:

            //组合键等于值相加
            Alt_Ctrl = 0x3,
            Alt_Shift = 0x5,
            Ctrl_Shift = 0x6,
            Alt_Ctrl_Shift = 0x7

 

这个是不经意思发觉的,网上的代码都没有提到,估计转的人太多了,知道的又不写出来。

 

3:把Hastable变更成List<Unint32>方式。

 

最近事比较多,写文都比较简单了,大伙见谅了。 

版权声明:本文原创发表于博客园,作者为路过秋天,原文链接:http://www.cnblogs.com/cyq1162/archive/2012/02/17/2355679.html

相关文章
|
5月前
设置VSCode代码编辑器右侧的Minimap代码缩略图滚动条切换显示、隐藏的快捷键Alt+M
设置VSCode代码编辑器右侧的Minimap代码缩略图滚动条切换显示、隐藏的快捷键Alt+M
IDEA中返回上一步和下一步快捷键失效【Ctrl+Alt+左箭头】
这篇文章提供了解决IntelliJ IDEA中"返回上一步"和"下一步"快捷键失效的方法,通常是因为与其他软件的快捷键发生冲突,解决方法是更改快捷键设置。
|
5月前
个人建议:VSCode和WebStorm中的“关闭其他所有编辑器、关闭左侧编辑器、关闭右侧编辑器”快捷键这么设置shift+alt+w、shift+alt+[、shift+alt+],你会受益匪浅
个人建议:VSCode和WebStorm中的“关闭其他所有编辑器、关闭左侧编辑器、关闭右侧编辑器”快捷键这么设置shift+alt+w、shift+alt+[、shift+alt+],你会受益匪浅
|
5月前
【冷门快捷键】设置VSCode终端大小最小化快捷键Alt+PageUp/PageDown、编辑代码窗口切换大小快捷键Alt+数字键盘“+”、Alt+数字键盘“-”、Alt+数字键盘“0”
【冷门快捷键】设置VSCode终端大小最小化快捷键Alt+PageUp/PageDown、编辑代码窗口切换大小快捷键Alt+数字键盘“+”、Alt+数字键盘“-”、Alt+数字键盘“0”
|
5月前
MFC编程 -- 判断是否按下ctrl和shift键
MFC编程 -- 判断是否按下ctrl和shift键
100 0
|
5月前
隐藏HBuilderX控制台的快捷键是Ctrl+Shift+Y
隐藏HBuilderX控制台的快捷键是Ctrl+Shift+Y
|
12月前
|
开发者
快捷键与热键有何异同?
快捷键与热键有何异同?
|
Web App开发 开发者
Chrome开发者工具一个有用的快捷键组合:Ctrl+Shift+E
Chrome开发者工具一个有用的快捷键组合:Ctrl+Shift+E
417 0
Chrome开发者工具一个有用的快捷键组合:Ctrl+Shift+E
|
Android开发
eclipse中Ctrl+Alt+↓向下复制快捷键与系统中翻转屏幕快捷键冲突问题(已解决)
eclipse中Ctrl+Alt+↓向下复制快捷键与系统中翻转屏幕快捷键冲突问题(已解决)
172 0
eclipse中Ctrl+Alt+↓向下复制快捷键与系统中翻转屏幕快捷键冲突问题(已解决)
Ui5 tool debug - ctrl+alt+shift+s实现原理
Created by Wang, Jerry, last modified on Mar 03, 2016
145 0
Ui5 tool debug - ctrl+alt+shift+s实现原理