C#实现设置系统级热键功能
在Win32、MFC中实现系统热键是很简单的事件,但是用C#实现就要花点时间了,下面看下C#如何设置系统级热键的。 第一步,先在类的级别中申明两个API函数, C# Code [http://www.xueit.com] ///
在Win32、MFC中实现系统热键是很简单的事件,但是用C#实现就要花点时间了,下面看下C#如何设置系统级热键的。
第一步,先在类的级别中申明两个API函数,

///注册热键 [DllImport("user32.dll")] private static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, Keys vk); ///卸载热键 [DllImport("user32.dll")] private static extern bool UnregisterHotKey(IntPtr hWnd, int id); 注意引入名字空间 System.Runtime.InteropServices;
上面两个函数参数的解释:
RegisterHotKey 函数中,
hWnd为本程序窗口的句柄,在C#的窗口中直接用Handle属性就可以引用窗口句柄
id为热键的标示符,是我们自己定义的,因为一个程序中可以定义多个热键,所以要用这个字段来区别,具体用法见下
fsModifiers为激活热键时,是否和系统键组合使用,none:0 Alt:1 Ctrl:2 Shift:4,并且还可以用或运算来组合使用
vk就是要定义的热键,C#中按键都被包含在Keys枚举中
UnregisterHotKey 函数中,
hWnd和RegisterHotKey 函数中是一样的,id为要卸载的热键标示
第二步,在窗口的初始化中注册热键,例如 RegisterHotKey(Handle, 100, 0, Keys.F9);
将些热键识别为100,0表示不使用系统键,Keys.F9表示此热键为F9,若要同时按Shift+Ctrl+F9,则第三个参数应该为 2|4 其实对二进制运算熟悉的朋友,可以立刻算出 2|4=6
第三步,可以响应热键了:
重写窗体的WndProc函数,具体代码为

protected override void WndProc(ref Message m) { //这个if的条件中固定的 if (m.Msg == 0x312) { //这个if就在于判断是哪个热键,100对应上面RegisterHotKey函数中的第二个参数 if (m.WParam.ToInt32() == 100) { //这里就是响应的函数 DoSomething(); } } base.WndProc(ref m); }
WndProc()函数的功能就是处理Windows消息,在其它地方还将看到这个函数的妙用!
第四步,在程序结束的时候调用UnregisterHotKey(Handle,100)卸载此热键!
精彩图集
精彩文章
热门标签
代码规范
MVVM
ISNULL
用户安全
WEB表单
不损失透明色
.net
单元测试
mytop
SQL语句
父进程
命令行
多进程同步
数据库镜像
单用户登录
页面跳转
目标文件更新
导致ASP.N
调用方
密码处理
关系数据库
2种
关闭本窗口
Mongodb一些命令
分治假币
php php在一
1-byte
非贪婪模式
表损坏
java分布式
移出节点
前导0
python日期
它在
层飘出
grub启动项
glob
去空格
字符串长度
指令大全
阻止泄漏
表名
数据加解密
size
tinyxml
静态局部变量
图片自定
菱形
手游
strip
handler
chroot
JVM
gb2312
新增元素
编译参数
是否删除
CPU温度
纵表
更简单
赞助商链接
@CopyRight 2002-2008, 1SOHU.COM, Inc. All Rights Reserved QQ:1010969229