为什么winapi函数有键盘驱动还需要扫码?

Why do winapi functions need scan code although there is a keyboard driver?

msdn,

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

wVk
Type: WORD
A virtual-key code. The code must be a value in the range 1 to 254. If the dwFlags member specifies KEYEVENTF_UNICODE, wVk must be 0.

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

下面Remarks解释了一个好处。

Set the KEYEVENTF_SCANCODE flag to define keyboard input in terms of the scan code. This is useful to simulate a physical keystroke regardless of which keyboard is currently being used. The virtual key value of a key may alter depending on the current keyboard layout or what other keys were pressed, but the scan code will always be the same.