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

VC 系统热键

2013年10月11日 ⁄ 综合 ⁄ 共 1996字 ⁄ 字号 评论关闭

软件环境:Visual Studio 2008 SP1
本次目的:实现全局热键的效果

      我们知道,通常在聊QQ的时候有新信息到来的时候,同时按下Ctrl+Alt+Z就能弹出新消息的聊天窗口。现在让我们来实现系统热键。
步骤一:建立一个基于对话框的工程,名称任意;
步骤二:在对话框头文件的消息映射函数 里面添加以下函数:

afx_msg LRESULT OnHotKey(WPARAM wParam,LPARAM lParam); 
afx_msg LRESULT OnHotKey(WPARAM wParam,LPARAM lParam);

步骤三:在对话框实现文件CPP里面在BEGIN_MESSAGE_MAP 和END_MESSAGE_MAP 之间加入

ON_MESSAGE(WM_HOTKEY,OnHotKey) 
ON_MESSAGE(WM_HOTKEY,OnHotKey)

步骤四:在对话框初始化函数OnInitDialog() 里面注册热键

RegisterHotKey(m_hWnd,1001,MOD_CONTROL|MOD_SHIFT|MOD_ALT,VK_F10); 
RegisterHotKey(m_hWnd,1001,MOD_CONTROL|MOD_SHIFT|MOD_ALT,VK_F10);

步骤五:对函数OnHotKey() 函数的实现

LRESULT CTestDlg::OnHotKey(WPARAM wParam,LPARAM lParam)   
{  
    if(wParam == 1001)  
    {  
        AfxMessageBox(_T("Ctrl+Shift+Alt+F10 Pressed!"));     
    }  
    return true;  

LRESULT CTestDlg::OnHotKey(WPARAM wParam,LPARAM lParam)
{
 if(wParam == 1001)
 {
  AfxMessageBox(_T("Ctrl+Shift+Alt+F10 Pressed!")); 
 }
 return true;
}

步骤六:销毁。重载OnDestroy ()函数

void CTestDlg::OnDestroy()  
{  
    CDialog::OnDestroy();  
        UnregisterHotKey( m_hWnd, 1001);  

void CTestDlg::OnDestroy()
{
 CDialog::OnDestroy();
        UnregisterHotKey( m_hWnd, 1001);
}

好了,完成。下面看下用到的两个重要函数:

BOOL RegisterHotKey(  
    HWND hWnd,     //窗口句柄  
    int id,        //热键标识符  
    UINT fsModifiers,    //按键参数  
    UINT vk        //热键的虚拟键码  
); 
BOOL RegisterHotKey(
    HWND hWnd,     //窗口句柄
    int id,        //热键标识符
    UINT fsModifiers,    //按键参数
    UINT vk        //热键的虚拟键码
);

对于fsModifiers 参数有以下的选项:

MOD_ALT        Either ALT key must be held down.
MOD_CONTROL      Either CTRL key must be held down.
MOD_SHIFT         Either SHIFT key must be held down.
MOD_WIN         Either WINDOWS key was held down. These keys are labeled with the Microsoft Windows logo.Keyboard shortcuts that involve the WINDOWS key are reserved for use by the operating system.
BOOL UnregisterHotKey(  
    HWND hWnd,   //句柄  
    int id       //热键标识符  
); 
BOOL UnregisterHotKey(
    HWND hWnd,   //句柄
    int id       //热键标识符
);

关于RegisterHotKey的百科解释http://baike.baidu.com/view/1080084.htm
关于UnregisterHotKey的百科解释http://baike.baidu.com/view/1080097.htm

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/akof1314/archive/2010/01/03/5122975.aspx

抱歉!评论已关闭.