Winform 多组合老板键Alt_Ctrl_Shift
某天,为了给微博粉丝精灵增加个老板键功能,找一惯的方式,开始从网络下手寻找: 关键字类似”C# 老板键“,一搜,一堆又一堆,然而出来的代码,基本上都是一个样的:
正常来说,老板键一般少不了:Alt+Ctrl+Shift+XX这种多组合方式,然而各类代码就是不直接说明,也没个提示,看来是有意隐藏,终于,还是被我发现其中的一些不为人知的隐藏属性:
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;
}
}
以上有几个要点说一下:
2:热键的组合:
最近事比较多,写文都比较简单了,大伙见谅了。
Winform 多组合老板键Alt_Ctrl_Shift相关推荐
- 全局组合按键-老板键
全局组合按键-老板键 //--------------------------------------------------------------------------- int ALT_CTR ...
- winform屏蔽Alt+F4组合键以防止用户关闭对话框
winform屏蔽Alt+F4组合键以防止用户关闭对话框,屏蔽Alt + F4的方法有很多,这里列出了一个比较简单而奏效的方法. 1. 捕获窗体的KeyDown事件 给窗体添加KeyDown事件,然后 ...
- Winform/C#入门编程之第二部分常用控件(三:组合框控件ComboBox)
简介: 使用 (可通过单击箭头以显示或隐藏控件的表示选择控件下拉列表.ComboBox 在控件的文本框允许用户选择项目从下拉列表或选择输入新文本. 介绍: 1.属性 常用属性 Name 获取或设置控件 ...
- C# Winform添加全局快捷键(老板键)
using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.W ...
- 我的WCF之旅(6):在Winform Application中调用Duplex Service出现TimeoutException的原因和解决方案...
几个星期之前写了一篇关于如何通过WCF进行 双向通信的文章([原创]我的WCF之旅(3):在WCF中实现双向通信(Bi-directional Communication) ),在文章中我提供了一个如 ...
- C# WinForm给Button按钮或其它控件添加快捷键响应
就在这介绍三种添加快捷键的方式. 第一种Alt + *(按钮快捷键) 在大家给button.label.menuStrip等控件设置Text属性时在名字后边加&键名就可以了,比如button1 ...
- Winform开发框架之插件化应用框架实现
支持插件化应用的开发框架能给程序带来无穷的生命力,也是目前很多系统.程序追求的重要方向之一,插件化的模块,在遵循一定的接口标准的基础上,可以实现快速集成,也就是所谓的热插拔操作,可以无限对已经开发好系 ...
- Winform开发框架之混合型框架的实现
我在之前一篇文章<Winform开发框架之框架演化>中,介绍了传统Winform开发框架.传统WCF开发框架.离线式WCF开发框架.混合式WCF开发框架,其中前面两种就是大家比较熟悉的框架 ...
- Winform开发框架里面使用事务操作的原理及介绍
在很多情况下,事务是个很有用的东西,可以把一系列的操作组合成一个原子粒度的操作,一旦组合中某个地方出错,可以整个干净的进行滚回,不会留下脏数据:除此之外,事务还能提高批量操作的效率,如在本地SQLit ...
最新文章
- Centos8 安装并使用Ansible(一)
- java spring context_java将对象注册到spring context中 | 学步园
- 【企业管理】组织与管理的思考
- 博客园自定义背景(一)
- 在 Gitee 上使用 GPG公钥(Beta版)
- h5 server send event(sse)
- Android 四大组件 之 BroadcastReceiver(广播接收者)
- 用示波器对单片机I2C时序进行图形波形分析的试验小结
- javascript 实现页面加载完再显示页面
- C# abstract ,virtual ,override,new --比较好的文章
- 单相智能电表(Modbus协议)
- PDF批量拆分、合并、书签提取、书签写入小工具
- The Witness - 美不胜收的解谜游戏
- vue学习之ElementUI时间选择器报错getTime is not a function
- chrome F12开发者工具 (二)preview 与response的区别
- 10.27 正睿提高9
- 测试过程中如何分析抓包工具抓的HTTP或TCP包
- 理解OAuth 2.0
- 抖音小程序配置webview域名
- MATLAB Floor 用法
热门文章
- 【Android】Bitmap图片裁剪(91/100)
- 在线申请会员卡正在审核中问题排查?
- 去师范类学校学计算机,我是女生,大三了,现在在一个师范学校读计算机专业,我现在想跨专业考研,想考数学师范类的,会很难吗?...
- 正确把握客户关系管理
- keil 查看 sp指针值的方法
- 卓威显示器能用html线吗,普通玩家到底用得到电竞显示器吗?卓威XL2540测评
- 吃鸡游戏(18.11.24)
- 盘点2022年度A站UE神作top
- 杨老师课堂之JavaWeb网站技术架构总结
- 路飞学城项目之课程搜索关键字接口及支付宝支付功能