MFC 注册热键

MFC 注册热键

具体实现步骤如下:
1.声明热键消息处理函数原型
在XXXDlg.h中消息映射声明处(afx_msg字样之后)加入如下语句:

[cpp]afx_msg LRESULT OnHotKey(WPARAM wParam,LPARAM lParam);[/cpp]

2.消息与相应处理函数相关联
在XXXDlg.Cpp中加入消息映射宏,使消息与相应处理函数发生关系,

[cpp]ON_MESSAGE(WM_HOTKEY,OnHotKey)[/cpp]

3.为方便以后的操作
添加Dlg的事件

[cpp]

WM_CREATE
WM_DESTROY

[/cpp]

系统自动创建响应 WM_CREATE 和 WM_DESTROY 消息的函数
OnCreate( )与OnDestroy( )的框架
4.向系统登记热键
在OnCreate()函数中加入如下代码以向系统登记热键,本例子的热键设为Ctrl+Shift+A.

[cpp]

RegisterHotKey(m_hWnd,1001,MOD_CONTROL|MOD_SHIFT,’A’);
RegisterHotKey(m_hWnd,1002,MOD_CONTROL|MOD_SHIFT,’a’);

[/cpp]

5.处理热键
在消息处理函数OnHotKey()中对热键进行处理,并可加入用户希望运行的程序代码等:

[cpp]

LRESULT CExampleView::OnHotKey(WPARAM wParam,LPARAM lParam)
{
if (wParam== 1001||wParam == 1002)
{
CWnd::SetForegroundWindow();//使得被激活窗口出现在前景
MessageBox(“Hello,How do you do!”);//验证
}
return 0;
}

[/cpp]

6.程序运行完毕后解除热键
在OnDestroy()中通过UnRegisterHotKey()解除热键登记,释放系统资源.

[cpp]

UnregisterHotKey(m_hWnd, 1001);
UnregisterHotKey(m_hWnd, 1002);

[/cpp]

7.编译并运行程序
运行程序后,无论何时只要按下热键Ctrl+Shift+A后本程序便立即成为前台运行程序,并出现在DeskTop上。

注册热键
下面是两个关键的函数:

[cpp]

BOOL RegisterHotKey(
HWND hWnd,
int id,
UINT fsModifiers,
UINT vk
);

[/cpp]

//用于在系统中注册热键
hWnd用于指定注册热键的窗口,如果为NULL的话将使热键被注册到该函数的调用线程;
id用于指定该热键的标识,在热键消息相应的时候,我们将通过该ID来对不同的热键消息作区分;
fsModifiers用于指定修改键(如:control、alt、shift甚至窗口键都可以),它有下列值可选:
值 描述
MOD_ALT 任一Alt键按下
MOD_CONTROL 任一Control键按下
MOD_KEYUP 任意键按下
MOD_SHIFT 任一Shift键按下
MOD_WIN 任一窗口键按下
vk的值对应用户按下的键值,
VK_0-VK_9是数字键 0-9,
VK_A-VK_Z是字母 a-z,
其他更多的键值请查阅MSDN。
注意:This function cannot associate a hot key with a window created by another thread.(MSDN里的原话)

[cpp]BOOL UnregisterHotKey(HWND  hWnd, int id);[/cpp]

//用于在系统中注消热键
该函数的参数和RegisiterHotKey的那两个参数意义大体相同。
或者可以使用Hook,利用函数SetWindowsHook挂接一个键盘Hook,具体例子请看VC带的例子Spy。