1.获取hotkey的唯一值
int hotkey_n;
hotkey_n=GlobalAddAtom(L"anyname");//加入原子表 名字可以任意但注意命名规则(不分大小写)
if(hotkey_n!=0)
{
rbl=RegisterHotKey(hothd,hotkey_n,MOD_ALT,31);//注册热键为alt+1
}
else
{
MessageBox(0,L"can't addatom",L"error",MB_OK);
}
2.头文件的其他消息响应函数的声明处按照相应的格式加上如下语句
LRESULT OnHotKey(WPARAM wParam,LPARAM lParam);//此句为加入内容,声明热键消息处理函数。
DECLARE_MESSAGE_MAP()
3..cpp中消息映射的定义处是用消息映射宏指定热键消息WM_HOTKEY的消息处理函数。
ON_MESSAGE(WM_HOTKEY,OnHotKey) //此句为手工加入内容,指定了热键消息的处理函数。
END_MESSAGE_MAP()
4.初始化中添加
::RegisterHotKey(m_hWnd,1001,MOD_CONTROL|MOD_ALT,'*');//登记热键.
RegisterHotKey
(
HWND hWnd, // 接收WM_HOTKEY的窗口句柄
int id, // hot key的ID号.
UINT fsModifiers, // 响应那个热键.
UINT vk // 与热键配合的键虚位码
)
hWnd 为接受热键的窗口句柄,可以用GetSafeHwnd()函数获得。
fsModifiers可取如下值MOD_ALT ;MOD_CONTROL ;MOD_SHIFT ;MOD_WIN 或他们的组合(中间用|连接)
5,.cpp中编写OnHotKey()函数,当按下热键'*'时程序变为前台,并跳出一个消息框。
LRESULT CSimKeyMouseDlg::OnHotKey(WPARAM wParam,LPARAM lParam)
{
//if(wParam==hotkey_show)
//{
// this->ShowWindow(0);
//}
//else if(wParam==hotkey_hide)
//{
// this->ShowWindow(1);
//}
UINT fuModifiers = (UINT) LOWORD(lParam); // key-modifier flags
UINT uVirtKey = (UINT) HIWORD(lParam); // virtual-key code
//判断响应了什么热键
if( MOD_CONTROL|MOD_ALT == fuModifiers && 'S' == uVirtKey )
{
this->ShowWindow(1);
}
else if( MOD_CONTROL|MOD_ALT == fuModifiers && 'H' == uVirtKey )
{
this->ShowWindow(0);
}
return 0;
}
6.注销热键,释放系统资源.
UnregisterHotKey(m_hWnd,1001);//注销热键,释放系统资源.