在Windows Mobile 6.1 / 6.5上使用全局热键进行应用程序切换

时间:2011-05-09 19:03:52

标签: c# c++ mfc windows-mobile keyboard-hook

我正在编写一个跨越Windows Mobile 6.1 / 6.5上C#和C / ++之间界限的应用程序。我们目前在我们的设备上运行了一个自助服务终端应用程序,并且想要添加来回切换到第二个自助服务终端应用程序的功能。

我们的目标是建立一个全局热键,可以在按下时切换进程窗口(类似于alt + tab工作的方式)。我们已经有了两个应用程序,并且我已经编写了一些代码来切换流程,但是我很难让项目的全局热键部分工作。

从我所做的所有阅读中,我的理解是监控全局按键的最佳方法是使用the SetWindowsHookEx function in coredll.dll链接到系统消息泵。不幸的是,我还读到平台上技术上不支持此功能。

我还发现了一些教程,建议在MFC框架中使用带有ON_WM_KEYUP / ON_WM_KEYDOWN宏的消息映射,但找不到任何特定于Windows Mobile的文档。当我尝试使用the documentation here时,我的设备一直在崩溃。

在平台上设置某种全局密钥挂钩是否有可接受的最佳做法?如果没有,是否有某些东西至少在技术上得到支持?

提前致谢。

ReplyQuote

3 个答案:

答案 0 :(得分:0)

为什么不使用RegisterHotKey调用并使用它来交换应用程序? IIRC硬件按钮通常映射到从0xC1(193)开始的键码。

答案 1 :(得分:0)

我们实际上最终在一个单独的线程上轮询coredll.dll中的GetAsyncKeyState函数。线程监视特定键,并在按下时抛出事件。

因为事件是在密钥轮询线程上执行的,所以你必须确保在抛出事件时使用委托在GUI线程上调用它的处理程序。

答案 2 :(得分:0)

我会选择键盘钩子,但只有当RegisterHotKey不适用于您的特定场景时才会使用。

  

从我所做的所有阅读中,我的理解是监控全局按键的最佳方法是使用coredll.dll中的SetWindowsHookEx函数链接到系统消息泵。不幸的是,我还读到平台上技术上不支持此功能。

技术上没有支持,理论上是正确的,但我没有看到WM 6.5。*设备实际上没有支持它。键盘挂钩是垂直市场定制坚固的WM设备应用程序的一个重要功能,我认为它是无法删除的,为了向后兼容。

WM空间的企业方面太重要了。