作者:刘树伟
日期:2014-03-03
我们的应用程序可能需要一个全局热键,当我们的程序未获得焦点时,也可以处理全局热键。
要给程序加上热键功能,有两种方法:
1. 使用RegisterHotKey API为程序注册一个热键;
2. 另一种方法是向应用程序主窗口发送WM_SETHOTKEY消息。
查阅WM_SETHOTKEY消息的MSDN文档,说由WM_SETHOTKEY注册的Hot Key与由RegisterHotKey注册的Hot Key没有相关性。
RegisterHotKey的原型为:
BOOL RegisterHotKey(HWND hWnd, int id, UINT fsModifiers, UINT vk);
对于id参数,如果是普通程序,取值范围为:0x0000-0xBFFF(十进制为49151),如果是共享DLL,范围为:0xC000-0xFFFF(为了避免与其它共享DLLs冲突,可以通过GlobalAddAtom得到Hot-key的ID)。
Hot Key一般由CHotKeyCtrl来生成,但需要注意的一点是:CHotKeyCtrl::GetHotKey得到的组合键(Modifiers)的值为:
#define HOTKEYF_SHIFT 0x01
#define HOTKEYF_CONTROL 0x02
#define HOTKEYF_ALT 0x04
#ifdef _MAC
#define HOTKEYF_EXT 0x80
#else
#define HOTKEYF_EXT 0x08
#endif
而RegisterHotKey的fsModifiers参数的取值为下面值的组合。
#define MOD_ALT 0x0001
#define MOD_CONTROL 0x0002
#define MOD_SHIFT 0x0004
#define MOD_WIN 0x0008
本内容试读结束,登录后可阅读更多
下载后可阅读完整内容,剩余3页未读,立即下载