【问题标题】:Application Switching with a Global Hot Key on Windows Mobile 6.1/6.5在 Windows Mobile 6.1/6.5 上使用全局热键切换应用程序
【发布时间】:2011-08-21 22:13:59
【问题描述】:

我正在编写一个跨越 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 时,我的设备一直在崩溃。

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

提前致谢。

回复引用

【问题讨论】:

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


    【解决方案1】:

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

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

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

    WM 领域的企业方面太重要了。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2011-03-18
          • 2013-06-24
          • 2023-04-08
          • 1970-01-01
          • 1970-01-01
          • 2011-09-14
          • 2011-04-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多