Win32 虚拟键代码 0xFF 用于什么,它是否在某处记录?

hey*_*cam 3 windows keyboard-events

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

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

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

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

Lex*_*kos 5

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

#define VK__none_   0xFF
Run Code Online (Sandbox Code Playgroud)

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

#define T00 _EQ(                           _none_                    )
Run Code Online (Sandbox Code Playgroud)

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

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

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