none
如何屏蔽快捷键带来的系统声音 RRS feed

  • 问题

  • 我给一个对话框按钮添加快捷键,采用重载PreTranslateMessage函数的办法,

    代码如下:

    BOOL CTestCharDlg::PreTranslateMessage(MSG* pMsg)
    {
        // TODO: 在此添加专用代码和/或调用基类
        if(pMsg->message==WM_KEYDOWN)
        {   
            UINT   iKey=(UINT)pMsg->wParam;    
            switch(iKey)
            {
            case VK_NUMPAD1:
                
                SendMessage(WM_COMMAND, MAKEWPARAM(IDC_BUTTON1, BN_CLICKED), (LPARAM)(GetDlgItem(IDC_BUTTON1)->m_hWnd));                          
                ::SetFocus(GetDlgItem(IDC_BUTTON1)->m_hWnd);
                break;
            case VK_NUMPAD2:
                SendMessage(WM_COMMAND, MAKEWPARAM(IDC_BUTTON2, BN_CLICKED), (LPARAM)(GetDlgItem(IDC_BUTTON2)->m_hWnd));                          
                ::SetFocus(GetDlgItem(IDC_BUTTON2)->m_hWnd);
                break;
            case VK_NUMPAD3:
                SendMessage(WM_COMMAND, MAKEWPARAM(IDC_BUTTON3, BN_CLICKED), (LPARAM)(GetDlgItem(IDC_BUTTON3)->m_hWnd));                          
                ::SetFocus(GetDlgItem(IDC_BUTTON3)->m_hWnd);
                break;
            case VK_NUMPAD4:
                SendMessage(WM_COMMAND, MAKEWPARAM(IDC_BUTTON4, BN_CLICKED), (LPARAM)(GetDlgItem(IDC_BUTTON4)->m_hWnd));                          
                ::SetFocus(GetDlgItem(IDC_BUTTON4)->m_hWnd);
                break;
            default:
                break;
            }
    
        }   
    
        return CDialog::PreTranslateMessage(pMsg);
    }
    

    但是带来的一个问题是当我按快捷键时,系统发出的“叮”的声音。但是我用鼠标直接单击该按钮却没有这个声音。请问我如何用代码屏蔽快捷键带来的系统声音。我用google搜索了也没搜到好的资料。

    前无古人,后无来者
    2009年7月14日 1:14

答案

  • BOOL RegisterHotKey(      

        HWND hWnd,     int id,     UINT fsModifiers,     UINT vk );
    注册hotkey就没有声音了。不用修改注册表了。。。
    • 已标记为答案 Tim Li 2009年7月21日 10:36
    2009年7月14日 2:11

全部回复

  • 这个按键声音是因为在dialog中没有输入框,按下任何键都会有这个声音出现,这个声音的控制是用注册表配置的,想要删掉该声音需要修改注册表
    大概在这个地方
    [HKEY_CURRENT_USER\AppEvents\Schemes]
    关于系统声音方案问题,还要看你当前用的什么系统方案,修改改方案的声音配置。
    如果有更好方案,欢迎批评指教。
    2009年7月14日 1:54
  • BOOL RegisterHotKey(      

        HWND hWnd,     int id,     UINT fsModifiers,     UINT vk );
    注册hotkey就没有声音了。不用修改注册表了。。。
    • 已标记为答案 Tim Li 2009年7月21日 10:36
    2009年7月14日 2:11
  •       注册热键必须使用组合键。我已经找到解决办法了,就是

    case VK_NUMPAD1:
               
                SendMessage(WM_COMMAND, MAKEWPARAM(IDC_BUTTON1, BN_CLICKED), (LPARAM)(GetDlgItem(IDC_BUTTON1)->m_hWnd));                         
                ::SetFocus(GetDlgItem(IDC_BUTTON1)->m_hWnd);
               return ;   // 这里直接退出,而不再调用CDialog::PreTranslateMessage(pMsg)函数。
     
    前无古人,后无来者
    2009年7月21日 13:24