修改Windows Mobile默认按键消息
本文讲述了如何利用SHCMBM_OVERRIDEKEY来修改Windows Mobile默认按键消息的方法。
问题来源:
问题描述:
在《利用HardwareButton操作Windows Mobile的硬件按钮》一文中,讲述了在.NET CF中,如何利用HardwareButton类重写 Pocket PC 硬件按钮的功能。但是在某些情况下,用户希望对应的硬件按钮只为其应用程序服务,而不实施该硬件按钮的默认功能(如Talk按键)。
解决方法:
向窗口发送SHCMBM_OVERRIDEKEY消息,在WM_HOTKEY中进行处理。
具体实施例:
参考SDK自带的Sample,位于“Windows Mobile 6 SDK\Samples\Common\CPP\Win32\FullScreen”目录。该例子演示了如何在Windows Mobile上隐藏taskbar和softkey,进行全屏显示。其中,退出全屏的功能,采用softkey按钮来实现。而具体的方式,就是向窗口发送SHCMBM_OVERRIDEKEY消息,在WM_HOTKEY中,加入用户自己的应用。以该工程为例,我们进行修改,加入“按Talk按键退出全屏”这个功能,而不弹出拨号界面。
1. 在SetSoftkeyBarForFullScreen函数中,加入消息发送函数:
// Override/Undo softkeys for key press notifications, so we can
// display taskbar & softkeys on SK1/SK2 press in full screen.
DWORD dwBits;
dwBits = bFullScreen
? SHMBOF_NODEFAULT | SHMBOF_NOTIFY
: 0;
SendMessage(hwndSoftKeyBar,
SHCMBM_OVERRIDEKEY,
VK_TSOFT1,
MAKELPARAM(SHMBOF_NODEFAULT | SHMBOF_NOTIFY, dwBits));
SendMessage(hwndSoftKeyBar,
SHCMBM_OVERRIDEKEY,
VK_TSOFT2,
MAKELPARAM(SHMBOF_NODEFAULT | SHMBOF_NOTIFY, dwBits));
//加入的消息发送函数
SendMessage(hwndSoftKeyBar,
SHCMBM_OVERRIDEKEY,
VK_TTALK,
MAKELPARAM(SHMBOF_NODEFAULT | SHMBOF_NOTIFY, dwBits));
2. 在CALLBACK DialogProc(…)函数的WM_HOTKEY中,加入VK_TTALK键的处理:
case VK_TTALK:
{
// if we are in full screen mode we want to exit
// when the user presses a softkey.
if (g_bFullScreen)
{
SendMessage(GetDlgItem(hWnd,IDC_EDIT), WM_SETTEXT, 0, (LPARAM)L"[TALKkey] Exiting Full Screen");
FullScreen(hWnd, FALSE);
}
}
break;
运行结果截屏
参考链接:
WM_HOTKEY:http://msdn.microsoft.com/en-us/library/aa453868.aspx
SHCMBM_OVERRIDEKEY:http://msdn.microsoft.com/en-us/library/aa454997.aspx
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2009-03-12 Windows Mobile上的HTML解析器