利用系统热键可以方便用户操作,快速调用另一个程序。比如可以按Ctrl+Alt+z可以调出QQ的聊天窗口。
方法比较简单,大致思路是用RegisterHotKey注册自定义热键和添加自定义消息,就可以实现增加系统热键。
第一步:
在类的头文件中添加
public:
ATOM m_atomId; //存储向操作系统添加的全局原子,是热键的标识符号
BOOL m_bRegister; //标识热键是否注册成功.TRUE:成功;FALSE:失败
在源代码文件中添加如下代码
//向操作系统添加一个全局原子Atom m_atomId,作为该热键的符号名称
m_atomId = GlobalAddAtom("myHotKey");
//设定ALT+Z为热键,应当尽量使用比较生疏的进行注册
//注册成功将m_bRegister变为TRUE,否则m_bRegister为FALSE
if(!RegisterHotKey(m_hWnd, m_atomId, MOD_ALT, 'Z'))
m_bRegister = FALSE;
else
m_bRegister = TRUE;
第二步:
添加自定消息响应函数
在头文件中添加
afx_msg void OnHotKey(WPARAM wParam,LPARAM lParam);
在源码文件中的BEGIN_MESSAGE_MAP之后END_MESSAGE_MAP之前添加如下的消息映射定义如下:
ON_MESSAGE(WM_HOTKEY,OnHotKey)
手工添加热键消息处理函数OnHotKey,注意其第一参数代表被按下的热键的符号标志.在该函数中用户可以完成注册Alt + Z热键需要进行的工作,比如呼出winap等.本例以演示为目的,不做具体的工作,只是弹出一个消息对话框响应该热键.代码如下:
void CMyHotKeyView::OnHotKey(WPARAM wParam, LPARAM lParam)
{
//如果按下的热键是用户注册的Alt + Z,则弹出消息对话框进行响应
//否则,什么都不做,交由系统去处理该热键事件
if(m_atomId == wParam)MessageBox("系统热键 Alt+Z 被激活", "响应系统热键", MB_OK);
}