龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > asp.net编程 >

C#实现设置系统级热键功能

时间:2009-12-21 11:47来源:未知 作者:admin 点击:
分享到:
在Win32、MFC中实现系统热键是很简单的事件,但是用C#实现就要花点时间了,下面看下C#如何设置系统级热键的。 第一步,先在类的级别中申明两个API函数, C# Code [http://www.xueit.com] ///

在Win32、MFC中实现系统热键是很简单的事件,但是用C#实现就要花点时间了,下面看下C#如何设置系统级热键的。

第一步,先在类的级别中申明两个API函数,

C# Code [http://www.xueit.com]
///注册热键
[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函数,具体代码为

C# Code [http://www.xueit.com]
        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)卸载此热键!

精彩图集

赞助商链接