如何通过发送到Soft Key Bar上的消息捕获一些硬按键

来源:互联网 发布:美工服装细节文案 编辑:程序博客网 时间:2024/04/28 04:18
这也是一个思路,通过SendMessage注册发送到soft key bar 的热键,捕获一些硬按键。下面以捕获VK_TTALK拨号键为例说明应用。

LRESULT CAboutDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
{
 SHMENUBARINFO mbi;       
 ZeroMemory(&mbi, sizeof(SHMENUBARINFO));
 mbi.cbSize = sizeof(SHMENUBARINFO);
 mbi.hwndParent = m_hWnd;
 mbi.hInstRes = _Module.GetModuleInstance();
 mbi.dwFlags = SHCMBF_HIDESIPBUTTON|SHCMBF_HMENU; //加上SHCMBF_HIDESIPBUTTON能够隐藏输入法图标。
 mbi.nToolBarId=IDR_MENU_ABOUT;
 SHCreateMenuBar(&mbi);
 SendMessage(mbi.hwndMB, SHCMBM_OVERRIDEKEY,  VK_TTALK, MAKELPARAM(SHMBOF_NODEFAULT | SHMBOF_NOTIFY,SHMBOF_NODEFAULT | SHMBOF_NOTIFY));
 
 return bHandled = FALSE;
}
 
LRESULT CAboutDlg::OnHotKey(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
 int idHotKey, uVirtualKey;
 idHotKey = LOWORD(lParam);
 uVirtualKey = HIWORD(lParam);
  switch(uVirtualKey)
  {
    case VK_TTALK:
     MessageBox(_T("VK_TTALK"), _T("test"), 0);
    break;
     case VK_TEND://此方法不支持使用VK_TEND;详见SHCMBM_OVERRIDEKEY的介绍.
    break;
  }
 
 return bHandled = FALSE;;
}
通过这种方法能够捕获的消息是有限的,对于SP,能够捕获以下消息:
VK_TSOFT1, VK_TSOFT2, VK_TBACK, VK_TVOLUMEUP, VK_TVOLUMEDOWN, VK_TTALK and VK_TRECORD;
对于PPC,能够捕获:VK_TTALK
相关参考资料链接http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2355830&SiteID=1
SHCMBM_OVERRIDEKEY的相关链接:http://msdn.microsoft.com/en-us/library/aa454997.aspx