有键盘驱动,为什么winapi功能需要扫码?

在 ol

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 直接告诉操作系统而不依赖键盘驱动程序?

YangXiaoPo

一项好处已在以下备注中进行了解释

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

键盘过滤器驱动程序。扫码 -> VK_??? (OEM 专用)

有Java mongodb驱动程序时,为什么需要scala mongodb驱动程序?

为什么功能组合有时需要两个“。” 结合两个功能

为什么在有usbhid的情况下我们需要usbkbd驱动程序?

为什么有些驱动程序仍需要固件?

为什么需要有效的驱动程序才能通过 USB 为设备充电?

为什么 Go 链码不需要注解?

为什么尾部调用优化需要操作码?

为什么Laravel的加密需要消息验证码(MAC)?

为什么结构需要朋友功能?

为什么功能组合需要括号?

为什么没有平面机械键盘?

为什么虚拟键盘没有消失?

为什么需要带有功能更新形式的React useState?

为什么减少谓词功能需要包装器功能?

为什么列表结构中的某些功能需要“列表”前缀,而有些则不需要?

为什么我没有得到200的状态码?

为什么`null` Nullable <T>具有哈希码?

为什么操作码中没有显示 if 语句?

为什么Java相同的String具有不同的哈希码

需要解释一下,为什么这个功能只有有时才能正常工作

为什么某些WinAPI函数需要将大小的结构作为其参数传递?

为什么“需要”编译但“导入”没有?

为什么此功能参数在元组上需要双括号?

为什么在MISRA:2012中需要功能原型?

为什么Flow需要注释导出功能的参数?

为什么HashiCorp的Vault需要启用ipc_lock功能?

为什么定义MonadReader需要功能依赖?

为什么此功能需要将“ this”绑定到它?