我正在编写一个跨越Windows Mobile 6.1/6.5上的C # 和 C/++ 之间的应用程序。我们目前在我们的设备上运行了一个展台应用程序,并希望添加来回切换到第二个展台应用程序的功能。
我们的目标是建立一个全局热键,无论何时按下进程窗口,它都会切换进程窗口(类似于 alt+tab 的工作方式)。我们已经有了这两个应用程序,我已经编写了一些切换进程的代码,但是很难让项目的全局热键部分工作。
从我所做的所有阅读中,我的理解是,监视全局按键的最佳方法是使用 coredll.dll 中的 SetWindowsHookEx 函数链接到系统消息泵。不幸的是,我也读到这个功能在技术上在平台上不受支持。
我还发现一些教程建议在 MFC 框架中使用带有 ON_WM_KEYUP/ON_WM_KEYDOWN 宏的消息映射,但找不到任何特定于 Windows Mobile 的文档。当我尝试使用此处的文档时,我的设备不断崩溃。
在平台上设置某种全局键钩子是否有公认的最佳实践?如果没有,是否有至少在技术上支持的东西?
提前谢谢。
回复报价
为什么不使用 RegisterHotKey 调用并使用它来交换应用程序?IIRC 硬件按钮通常映射到从 0xC1 (193) 开始的键代码。
我们实际上最终在单独的线程上轮询了 coredll.dll 中的 GetAsyncKeyState 函数。线程监视特定键,并在按下该键时引发事件。
由于事件是在密钥轮询线程上执行的,因此必须确保在引发事件时使用委托在 GUI 线程上调用其处理程序。
我会选择键盘钩子,但前提是RegisterHotKey不适用于您的特定场景。
从我所做的所有阅读中,我的理解是,监视全局按键的最佳方法是使用 coredll.dll 中的 SetWindowsHookEx 函数链接到系统消息泵。不幸的是,我也读到这个功能在技术上在平台上不受支持。
不支持技术,理论上是正确的,但我还没有看到现实中不支持它的WM 6.5.*设备。键盘挂钩是垂直市场定制坚固的 WM 设备应用程序的重要功能,我认为它无法删除,以实现向后兼容性。
WM空间的企业方面太重要了。