【问题标题】:What is Win32 virtual key code 0xFF used for and is it documented somewhere?Win32 虚拟键码 0xFF 是用来做什么的,它是否记录在某处?
【发布时间】:2018-01-07 07:00:57
【问题描述】:

我有一台支持多点触控手势的上网本。当您向左或向右滑动三指时,它会向活动窗口发送一些消息——对于某些窗口,这意味着发送向上/向下翻页按键。

根据 Spy++,向右滑动发送的实际消息是:

  • WM_KEYDOWN,虚拟键 = 0xFF
  • WM_KEYDOWN,虚拟键 = VK_NEXT
  • WM_KEYUP,虚拟键 = VK_NEXT
  • WM_KEYUP,虚拟键 = 0xFF

我的问题是:这个 0xFF 虚拟键码是什么,它是否记录在某处? winuser.h 中没有对应的#define。

【问题讨论】:

    标签: windows keyboard-events


    【解决方案1】:

    0xFF 是键盘布局代码中使用的值,表示“无映射”。在 Windows DDK/SDK 的kbd.h 中是这样定义的:

    #define VK__none_   0xFF
    

    每个没有指定含义的扫描码都通过宏映射到这个虚拟键码。比如扫码0没有映射:

    #define T00 _EQ(                           _none_                    )
    

    如果一个Fn键产生0xFF,那是因为Fn键的扫描码没有映射,而不是因为0xFF表示Fn键。 Fn键没有标准扫描码;这取决于制造商,因此不太可能映射到标准键盘布局中的任何有意义的东西。

    至于为什么会发送 VK 0xFF:可能不是。制造商特定的按键和按钮有时会(从硬件)发送扫描码,该扫描码未映射到任何东西,但可以通过扫描码检测到。当制造商的软件检测到密钥时,它会采取一些动作,例如发送 VK_NEXT(但可能该动作取决于设置或哪个应用程序具有焦点)。聚焦的应用程序也能看到按键,但通常什么都不做,因为该扫描码没有映射(wParam 为 0xFF)。

    您可以在 WM_KEYDOWN 消息的 lParam 的第 16-23 位找到扫描码。

    【讨论】:

      【解决方案2】:

      在大多数笔记本电脑上,VK 0xff 对应于“Fn”键。

      【讨论】:

      • 有趣。在此上网本上,如果要键入 Page Down (Fn+Down),则需要 Fn。单独键入 Fn 似乎根本不会发送 WM_KEYDOWN,而按 Fn+Down 只会发送带有 VK_NEXT 的 WM_KEYDOWN,而没有提及 0xFF 键。
      • 我猜你的触摸板正在合成窗口消息,并且为了安全起见,不仅为 VK_NEXT 创建 WM_* 消息,还创建与访问该功能所需的 Fn 键相关联的消息。另一方面,键盘直接发送 VK_NEXT ......仅供参考,在我的 Thinkpad 上,访问 Page Down 键将生成如原始问题所示的键序列。
      • 是的,可能他们需要发送 Fn 键代码以兼容某些应用程序。
      猜你喜欢
      • 2010-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-08
      • 1970-01-01
      • 1970-01-01
      • 2010-09-16
      • 1970-01-01
      相关资源
      最近更新 更多