前段时间有两个朋友问我VC如何注册、屏蔽全局键盘热键,这是以前写过的一段代码。说实话,自己都感觉它比较“猥琐”,多的不说看源码吧!(哪位兄弟有其他思路,可以交流交流......)
1、定义按键消息热键的宏,后续可自行添加更多
- /************************************************************************/
- // VirtualKey.H By:Koma 2009.08.22
- // 定义热键
- // http://blog.csdn.net/wangningyu
- /************************************************************************/
- /* Ctrl组合键 (D、F2、F8、F9、F10、F11、F12 共6个)
- /************************************************************************/
- #define IDH_HOT1 4001
- #define IDH_HOT2 4002
- #define IDH_HOT3 4003
- #define IDH_HOT4 4004
- #define IDH_HOT5 4005
- #define IDH_HOT6 4006
- #define IDH_HOT19 4019
- /************************************************************************/
- /* Alt组合键 (F1、F4、F9 共3个)
- /************************************************************************/
- #define IDH_HOT7 4007
- #define IDH_HOT8 4008
- #define IDH_HOT9 4009
- /************************************************************************/
2、注册全局的热键,从而实现屏蔽热键
- /************************************************************************/
- /* 函数说明:MFC初始化函数,用来注册全局热键
- /* 参 数:无
- /* 返 回 值:成功返回TRUE、失败返回FALSE
- /* By:Koma 2009.07.30 17:50
- /************************************************************************/
- BOOL CHookKBDlg::OnInitDialog()
- {
- CDialog::OnInitDialog();
- // 如果需要添加其他的组合键,需要在VirtualKey.h添加记录
- // 在OnInitDialog、PreTranslateMessage中各添加一行代码即可
- // Ctrl组合键 (D、F2、F8、F9、F10、F11、F12 共7个)
- RegisterHotKey(this->GetSafeHwnd(),IDH_HOT1, MOD_CONTROL, VK_F2);
- RegisterHotKey(this->GetSafeHwnd(),IDH_HOT2, MOD_CONTROL, VK_F8);
- RegisterHotKey(this->GetSafeHwnd(),IDH_HOT3, MOD_CONTROL, VK_F9);
- RegisterHotKey(this->GetSafeHwnd(),IDH_HOT4, MOD_CONTROL, VK_F10);
- RegisterHotKey(this->GetSafeHwnd(),IDH_HOT5, MOD_CONTROL, VK_F11);
- RegisterHotKey(this->GetSafeHwnd(),IDH_HOT6, MOD_CONTROL, VK_F12);
- RegisterHotKey(this->GetSafeHwnd(),IDH_HOT19, MOD_CONTROL, 'D');
- // Alt组合键 (F1、F4、F9 共3个)
- RegisterHotKey(this->GetSafeHwnd(),IDH_HOT7, MOD_ALT, VK_F1);
- RegisterHotKey(this->GetSafeHwnd(),IDH_HOT8, MOD_ALT, VK_F4);
- RegisterHotKey(this->GetSafeHwnd(),IDH_HOT9, MOD_ALT, VK_F9);
- return TRUE; // return TRUE unless you set the focus to a control
- }
3、有点像"占着茅坑不拉S”,直接过滤掉此消息...
- /************************************************************************/
- /* 函数说明:MFC虚函数,用来屏蔽热键
- /* 参 数:无
- /* 返 回 值:屏蔽返回TRUE、不屏蔽返回FALSE
- /* By:Koma 2009.07.30 17:50
- /************************************************************************/
- BOOL CHookKBDlg::PreTranslateMessage(MSG* pMsg)
- {
- // TODO: Add your specialized code here and/or call the base class
- if(pMsg->message==WM_HOTKEY)
- {
- switch(pMsg->wParam)
- {
- case IDH_HOT1:
- case IDH_HOT2:
- case IDH_HOT3:
- case IDH_HOT4:
- case IDH_HOT5:
- case IDH_HOT6:
- case IDH_HOT7:
- case IDH_HOT8:
- case IDH_HOT9:
- // MessageBox(_T("此类组合键严禁使用!"));
- // true 标示处理过此消息不再投递到消息队列,
- SetDlgItemText(IDC_STATIC1,"别按了,没用的!");
- return TRUE;
- }
- }
- return CDialog::PreTranslateMessage(pMsg);
- }
4、VC源代码下载地址
程序在VC6.0 + WIN SP3下测试完成通过,如有什么问题,可以发邮件交流!
网盘下载:http://www.rayfile.com/files/8dda00ca-8ef9-11de-9b83-0014221b798a/
没有评论:
发表评论