在MFC应用程序中捕获Windows 8平板电脑上的shift键状态

在MFC应用程序中捕获Windows 8平板电脑上的shift键状态,windows,windows-8,mfc,Windows,Windows 8,Mfc,我们基于MFC的Windows应用程序的功能取决于shift键的状态。Shift显示超级用户菜单命令,并且Shift拖动与普通拖动具有不同的行为。我正在探索支持Windows 8平板电脑的选项,似乎没有直接的方法来检测Windows 8软键盘shift键的状态 使用GetAsyncKeyState(VK\u SHIFT)(我们当前的方法)不会检测到此键 通过检查所有传入的键盘消息,我发现: 单独轻敲shift键不会产生键盘事件 双击shift键会产生caps lock key事件,与正常cap

我们基于MFC的Windows应用程序的功能取决于shift键的状态。Shift显示超级用户菜单命令,并且Shift拖动与普通拖动具有不同的行为。我正在探索支持Windows 8平板电脑的选项,似乎没有直接的方法来检测Windows 8软键盘shift键的状态

使用
GetAsyncKeyState(VK\u SHIFT)
(我们当前的方法)不会检测到此键

通过检查所有传入的键盘消息,我发现:

  • 单独轻敲shift键不会产生键盘事件
  • 双击shift键会产生caps lock key事件,与正常caps lock key事件无法区分
  • 按一下shift键,然后再按另一个键(如“q”键),会产生一个shift键事件、一个按键事件和一个shift键(向上?)事件
是否有其他方法可以尝试检测软键盘shift键的状态?是否有其他人成功检测到Windows 8平板电脑软键盘上此键盘的状态


插入这些设备的外部键盘都有正常工作的shift键。该问题特定于软键盘。

调用
GetAsynKeyState
返回与硬件相关的中断级别状态。这也许可以解释为什么它与软键盘一起使用时不会返回预期结果。相反,调用(处理键盘消息时)或评估
wParam
(例如处理时)应适用于软键盘和外部键盘。