MFC 注册热键

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

    afx_msg LRESULT OnHotKey(WPARAM wParam,LPARAM lParam);

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

    ON_MESSAGE(WM_HOTKEY,OnHotKey)

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

WM_CREATE

WM_DESTROY

系统自动创建响应 WM_CREATE 和 WM_DESTROY 消息的函数
OnCreate(   )与OnDestroy(   )的框架

4.向系统登记热键
在OnCreate()函数中加入如下代码以向系统登记热键,本例子的热键设为Ctrl+Shift+A.

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

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

LRESULT CExampleView::OnHotKey(WPARAM wParam,LPARAM lParam)

{
    if (wParam== 1001||wParam == 1002)

    {

        CWnd::SetForegroundWindow();//使得被激活窗口出现在前景

        MessageBox("Hello,How   do   you   do!");//验证

    }

    return 0;

}

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

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

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

注册热键
下面是两个关键的函数: 
BOOL   RegisterHotKey(
   HWND hWnd,
   int id,
   UINT fsModifiers,
   UINT vk
   );
//用于在系统中注册热键

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里的原话) 


BOOL UnregisterHotKey(HWND  hWnd, int id);
//用于在系统中注消热键 
该函数的参数和RegisiterHotKey的那两个参数意义大体相同。

或者可以使用Hook,利用函数SetWindowsHook挂接一个键盘Hook,具体例子请看VC带的例子Spy。

原文地址:https://www.cnblogs.com/lizs/p/3624201.html