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

本文介绍了一种通过 SendMessage 注册并捕获发送到 softkeybar 的热键的方法,以实现捕获特定硬件按键的功能,例如拨号键 VK_TTALK。文中提供了用于 Windows Mobile (SP) 和 Windows CE (PPC) 平台的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这也是一个思路,通过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
SHCMBM_OVERRIDEKEY的相关链接:http://msdn.microsoft.com/en-us/library/aa454997.aspx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值