C#注册窗体热键

来源:互联网 发布:手机淘宝 退货率 编辑:程序博客网 时间:2024/06/05 11:12

热键:通过键盘上的组合键对目标窗体实施用户相关的操作,例如,如果你的机器上安装了金山词霸2007
,当在键盘上按 Ctrl Alt Z 这样的组合时,会显示窗体或最小化到隐藏。这样的是通过WINAPI的RegisterHotKey 函数实现的。
.net framework2.0并不提供有关窗体热键注册的类,因此可通过DllImport导出该API函数


//注册热键的函数
[DllImport("user32.dll",SetLastError=true)]
            static extern bool RegisterHotKey(IntPtr hWnd,int id,int fsModifiers,
              int vk);
//释放由RegisterHotKey注册的热键
[DllImport("user32.dll",SetLastError=true)]
            static extern bool UnregisterHotKey(IntPtr hwnd,int id);

并不是在代码块调用RegisterHotKey就完事,还必须在窗体过程里处理WM_HOTKEY通知,才能实现效果。
//下载地址:http://download.csdn.net/source/1837701 ----找到 c#窗体热键,那个标题的

 


HotKeyModifiers枚举提供对 ctrl alt shift win 键的封装

HotKeyRegister 类 是在c#中实现注册窗体热键的类,这个类需要在Form.WndProc中对WM_HOTKEY通知的处理才能对热键作出响应.

HotKeyRegister2从HotKeyRegister类 和IMessageFilter接口继承,从IMessageFilter接口继承的类,可通过调用Application.AddMessageFilter方法,对窗体的消息过程添加筛选,由于Form的并不提供对WM_HOTKEY通知的事件对象,因此使用Application.AddMessageFilter 添加一个在产生WM_HOTKEY通知时的事件回调,即HotKeyRegister2.HotKeyEventArgs事件,如果一个Form实例化一个HotKeyRegister2类型的对象,将在发生WM_HOTKEY通知时,产生一个HotKeyRegister2.HotKeyEventArgs事件,用于可根据这个事件参数HotKeyEventArgs类,来获取有关HotKeyRegister2类实例的信息以及WM_HOTKEY的Message
值得注意的是,Application类是一个静态类,在运行Form实例和调用Application.AddMessageFilter方法必须在同一个线程里,否则会有异常。某个窗体的热键注册可通过HotKeyRegister2类在某个客户端实现,而并非总是在Form类的定义里,只要是,它们在同一个线程里就OK了
另外 某些情况下,窗体句柄的值可能发生改变,这时调用原有的WM_HOTKEY不会进行处理,这时就要重新注册热键了,这时需要调用SetHotKeyRegister(System.IntPtr targetHwnd),这个是保留原有的热键组合,
或者调用SetHotKeyRegister(System.IntPtr targetHwnd, Feng.Win32API.HotKeyModifiers hkModifiers, System.Windows.Forms.Keys virtualKey),这个则是重新注册新的热键组合

 

原创粉丝点击