0

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

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

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

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

在平台上设置某种全局密钥挂钩是否有公认的最佳实践?如果没有,是否有至少在技术上得到支持的东西?

提前致谢。

回复报价

4

3 回答 3

0

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

因为事件是在键轮询线程上执行的,所以当事件被抛出时,您必须确保使用委托在 GUI 线程上调用其处理程序。

于 2011-05-16T12:47:46.160 回答
0

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

于 2011-05-09T22:36:14.687 回答
0

我会选择键盘挂钩,但前提是 RegisterHotKey 不适用于您的特定场景。

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

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

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

于 2011-05-16T12:59:52.700 回答