在 Windows Mobile 6.1/6.5 上使用全局热键切换应用程序
Application Switching with a Global Hot Key on Windows Mobile 6.1/6.5
我正在编写一个跨越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空间的企业方面太重要了。
- 试图在visual studio上用C++创建一个桌面应用程序
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 在C应用程序中运行C++(带有STL)函数
- 使用全局 IP 地址时,C++ winsock 2 应用程序中的代码是否必须更改?
- 使用C 的多线程应用程序中测量全局时间(壁挂)的最快方法
- JNI检测到应用程序中的错误:使用已删除的弱全局参考
- 如何为多线程应用程序创建全局对象
- 我可以在 MFC 应用程序中定义全局变量的位置
- 在多线程c++服务器应用程序中处理非常量全局配置
- 在应用程序中使用全局变量C++
- 跨平台Qt应用程序中的全局热键
- 离开 c++ 应用程序而不运行全局静态对象的析构函数
- 如何在MFC应用程序中替换全局运算符new和delete(仅限调试)
- 在多个窗口中使用全局QNetworkCookieJar时,应用程序崩溃
- 在没有运行应用程序的情况下添加Windows全局热键
- 在iPhone xcode应用程序中,是否可以声明一个具有全局作用域的指针?
- 无法从 Visual C++ 窗体应用程序中的窗体访问全局变量
- 64位全局挂钩锁定32位应用程序
- 在 Windows Mobile 6.1/6.5 上使用全局热键切换应用程序
- 捕捉全局鼠标滚动,并向应用程序发送自定义鼠标滚动事件