现在的位置: 首页 > 综合 > 正文

如何注册全局快捷键

2013年10月02日 ⁄ 综合 ⁄ 共 1381字 ⁄ 字号 评论关闭

 所谓全局快捷键,即使指在任何情况下,当用户按下某个快捷键后,操作系统
都会执行指定程序
的消息处理函数

使用步骤
1.在程序的OnCreate函数中注册
快捷键
格式:
RegisterHotKey(m_hWnd,wParam参数
值,系统键,快捷键);
例如:
    RegisterHotKey(m_hWnd,1001,0,MOD_CONTROL|MOD_SHIFT,'A');
    RegisterHotKey(m_hWnd,1002,MOD_CONTROL|MOD_SHIFT,'a');  
注意大小写应当分别注册
2.按照通常方法建立消息WM_HOTKEY的处理函数OnHotKey
在函数中根据wParam的值处理快捷键的消息
例如:
    if (wParam== 1001||wParam ==1002)
    {
        CWnd::SetForegroundWindow();
        MessageBox("Hello,How do you do");
    }
3.在OnDestroy函数中取消快捷键
格式:
UnregisterHotKey(m_hWnd, wParam值);
例如
.h
// Generated message map functions
//{{AFX_MSG(CCDN_BossKeyDlg)
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnDestroy();
//}}AFX_MSG
        afx_msg void OnHotKey(WPARAM wParam, LPARAM lParam);
DECLARE_MESSAGE_MAP()
.cpp
BEGIN_MESSAGE_MAP(CCDN_BossKeyDlg, CDialog)
//{{AFX_MSG_MAP(CCDN_BossKeyDlg)
ON_WM_PAINT()
ON_WM_DESTROY()
//}}AFX_MSG_MAP
    ON_MESSAGE(WM_HOTKEY, OnHotKey)
END_MESSAGE_MAP()
int CCDN_BossKeyDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CDialog::OnCreate(lpCreateStruct) == -1)
  return -1;

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

    return 0;
}
void CCDN_BossKeyDlg::OnDestroy()
{
    CDialog::OnDestroy();

    UnregisterHotKey(m_hWnd, 1001);
    UnregisterHotKey(m_hWnd, 1002);
}
void CCDN_BossKeyDlg::OnHotKey(WPARAM wParam, LPARAM lParam)
{
    SetForegroundWindow();
}

抱歉!评论已关闭.