C#全局热键设置与窗体热键设置实例
本文实例讲述了C#全局热键设置与窗体热键设置,分享给大家供大家参考。具体实现方法如下:
1、窗体热键
首先要设置主窗体KeyPreview为true,可直接在属性中进行设置,
或者在窗体加载中设置:this.KeyPreview=true;
然后添加窗体KeyDown事件,如下:
privatevoidFrmMain_KeyDown(objectsender,KeyEventArgse) { if(e.Alt&&e.Shift&&e.Control&&e.KeyCode==Keys.S) { MessageBox.Show("我按了Control+Shift+Alt+S"); } }
2、全局热键设置
定义API函数》注册热键》卸载热键
我这里定义了AppHotKey类,全部代码如下:
publicclassAppHotKey { [DllImport("kernel32.dll")] publicstaticexternuintGetLastError(); //如果函数执行成功,返回值不为0。 //如果函数执行失败,返回值为0。要得到扩展错误信息,调用GetLastError。 [DllImport("user32.dll",SetLastError=true)] publicstaticexternboolRegisterHotKey( IntPtrhWnd, //要定义热键的窗口的句柄 intid, //定义热键ID(不能与其它ID重复) KeyModifiersfsModifiers, //标识热键是否在按Alt、Ctrl、Shift、Windows等键时才会生效 Keysvk //定义热键的内容 );
[DllImport("user32.dll",SetLastError=true)] publicstaticexternboolUnregisterHotKey( IntPtrhWnd, //要取消热键的窗口的句柄 intid //要取消热键的ID );
//定义了辅助键的名称(将数字转变为字符以便于记忆,也可去除此枚举而直接使用数值) [Flags()] publicenumKeyModifiers { None=0, Alt=1, Ctrl=2, Shift=4, WindowsKey=8 } ///<summary> ///注册热键 ///</summary> ///<paramname="hwnd">窗口句柄</param> ///<paramname="hotKey_id">热键ID</param> ///<paramname="keyModifiers">组合键</param> ///<paramname="key">热键</param> publicstaticvoidRegKey(IntPtrhwnd,inthotKey_id,KeyModifierskeyModifiers,Keyskey) { try { if(!RegisterHotKey(hwnd,hotKey_id,keyModifiers,key)) { if(Marshal.GetLastWin32Error()==1409){MessageBox.Show("热键被占用!");} else { MessageBox.Show("注册热键失败!"); } } } catch(Exception){} } ///<summary> ///注销热键 ///</summary> ///<paramname="hwnd">窗口句柄</param> ///<paramname="hotKey_id">热键ID</param> publicstaticvoidUnRegKey(IntPtrhwnd,inthotKey_id) { //注销Id号为hotKey_id的热键设定 UnregisterHotKey(hwnd,hotKey_id); } }