您的位置:首页 > 其它

VC如何注册、屏蔽全局键盘热键

2009-08-22 16:34 597 查看
      前段时间有两个朋友问我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/

 

      CSDN:   http://download.csdn.net/source/1596580

 

      QQ:27746072     E-mail:koma0769@vip.qq.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mfc 测试 qq