某天,为了给微博粉丝精灵增加个老板键功能,找一惯的方式,开始从网络下手寻找: 关键字类似”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>方式。

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

Winform 多组合老板键Alt_Ctrl_Shift相关推荐

  1. 全局组合按键-老板键

    全局组合按键-老板键 //--------------------------------------------------------------------------- int ALT_CTR ...

  2. winform屏蔽Alt+F4组合键以防止用户关闭对话框

    winform屏蔽Alt+F4组合键以防止用户关闭对话框,屏蔽Alt + F4的方法有很多,这里列出了一个比较简单而奏效的方法. 1. 捕获窗体的KeyDown事件 给窗体添加KeyDown事件,然后 ...

  3. Winform/C#入门编程之第二部分常用控件(三:组合框控件ComboBox)

    简介: 使用 (可通过单击箭头以显示或隐藏控件的表示选择控件下拉列表.ComboBox 在控件的文本框允许用户选择项目从下拉列表或选择输入新文本. 介绍: 1.属性 常用属性 Name 获取或设置控件 ...

  4. C# Winform添加全局快捷键(老板键)

    using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.W ...

  5. 我的WCF之旅(6):在Winform Application中调用Duplex Service出现TimeoutException的原因和解决方案...

    几个星期之前写了一篇关于如何通过WCF进行 双向通信的文章([原创]我的WCF之旅(3):在WCF中实现双向通信(Bi-directional Communication) ),在文章中我提供了一个如 ...

  6. C# WinForm给Button按钮或其它控件添加快捷键响应

    就在这介绍三种添加快捷键的方式. 第一种Alt + *(按钮快捷键) 在大家给button.label.menuStrip等控件设置Text属性时在名字后边加&键名就可以了,比如button1 ...

  7. Winform开发框架之插件化应用框架实现

    支持插件化应用的开发框架能给程序带来无穷的生命力,也是目前很多系统.程序追求的重要方向之一,插件化的模块,在遵循一定的接口标准的基础上,可以实现快速集成,也就是所谓的热插拔操作,可以无限对已经开发好系 ...

  8. Winform开发框架之混合型框架的实现

    我在之前一篇文章<Winform开发框架之框架演化>中,介绍了传统Winform开发框架.传统WCF开发框架.离线式WCF开发框架.混合式WCF开发框架,其中前面两种就是大家比较熟悉的框架 ...

  9. Winform开发框架里面使用事务操作的原理及介绍

    在很多情况下,事务是个很有用的东西,可以把一系列的操作组合成一个原子粒度的操作,一旦组合中某个地方出错,可以整个干净的进行滚回,不会留下脏数据:除此之外,事务还能提高批量操作的效率,如在本地SQLit ...

最新文章

  1. Centos8 安装并使用Ansible(一)
  2. java spring context_java将对象注册到spring context中 | 学步园
  3. 【企业管理】组织与管理的思考
  4. 博客园自定义背景(一)
  5. 在 Gitee 上使用 GPG公钥(Beta版)
  6. h5 server send event(sse)
  7. Android 四大组件 之 BroadcastReceiver(广播接收者)
  8. 用示波器对单片机I2C时序进行图形波形分析的试验小结
  9. javascript 实现页面加载完再显示页面
  10. C# abstract ,virtual ,override,new --比较好的文章
  11. 单相智能电表(Modbus协议)
  12. PDF批量拆分、合并、书签提取、书签写入小工具
  13. The Witness - 美不胜收的解谜游戏
  14. vue学习之ElementUI时间选择器报错getTime is not a function
  15. chrome F12开发者工具 (二)preview 与response的区别
  16. 10.27 正睿提高9
  17. 测试过程中如何分析抓包工具抓的HTTP或TCP包
  18. 理解OAuth 2.0
  19. 抖音小程序配置webview域名
  20. MATLAB Floor 用法

热门文章

  1. 【Android】Bitmap图片裁剪(91/100)
  2. 在线申请会员卡正在审核中问题排查?
  3. 去师范类学校学计算机,我是女生,大三了,现在在一个师范学校读计算机专业,我现在想跨专业考研,想考数学师范类的,会很难吗?...
  4. 正确把握客户关系管理
  5. keil 查看 sp指针值的方法
  6. 卓威显示器能用html线吗,普通玩家到底用得到电竞显示器吗?卓威XL2540测评
  7. 吃鸡游戏(18.11.24)
  8. 盘点2022年度A站UE神作top
  9. 杨老师课堂之JavaWeb网站技术架构总结
  10. 路飞学城项目之课程搜索关键字接口及支付宝支付功能