首页 > 解决方案 > 为什么winapi函数虽然有键盘驱动却需要扫码?

问题描述

msdn中,

typedef struct tagKEYBDINPUT {
  WORD      wVk;
  WORD      wScan;
  DWORD     dwFlags;
  DWORD     time;
  ULONG_PTR dwExtraInfo;
} KEYBDINPUT, *PKEYBDINPUT, *LPKEYBDINPUT;

wVk
类型:WORD
一个虚拟键码。代码必须是 1 到 254 范围内的值。如果dwFlags成员指定KEYEVENTF_UNICODE则 wVk必须为 0。

键盘驱动程序确实将虚拟键码转换为扫描码。但是为什么winapi函数需要扫码呢?是不是因为API直接告诉操作系统,不依赖键盘驱动?

标签: winapiscancodes

解决方案


下面的备注中解释了一个好处。

设置KEYEVENTF_SCANCODE标志以根据扫描代码定义键盘输入。无论当前使用的是哪个键盘,这对于模拟物理击键很有用。一个键的虚拟键值可能会根据当前的键盘布局或按下的其他键而改变,但扫描码将始终相同。


推荐阅读