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)卸载此热键!
精彩图集
精彩文章
热门标签
查找和置顶
查改
lua
代码复用
访
php.ini路径
系统命令
一维二维数组
MySQL超时
脚本自身修改
轻量开发包
片段
运行速
datetime
GPS功能
win2012
php导出excel
移动文件夹
滚动
侧边栏
dfs
象棋暗棋
文本框值
搜索文本字段
to_char
java反射
uinput
interp
VID
全栈框架
超出隐藏
下一周
PHP PHP随
HTTP-REFERER
pickle
被锁的表
if条件
第4篇
入门篇
inet_ntoa
usb
Oracle索引
建表
php PHP文件
querystring
cpu占用
php php写
任务栏
传值
断开
Mysql优化
http
关联其他
php数组去重复
标准库函数
数据库PHP代码
prepare
popen()
Django1.7
not_in
赞助商链接
@CopyRight 2002-2008, 1SOHU.COM, Inc. All Rights Reserved QQ:1010969229