winapi - 为什么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直接告诉操作系统,不依赖键盘驱动?
解决方案
下面的备注中解释了一个好处。
设置KEYEVENTF_SCANCODE标志以根据扫描代码定义键盘输入。无论当前使用的是哪个键盘,这对于模拟物理击键很有用。一个键的虚拟键值可能会根据当前的键盘布局或按下的其他键而改变,但扫描码将始终相同。
推荐阅读
- typescript - 如何在 Typescript 中声明类型化对象变量
- javascript - 使用来自 firebase 的多个 id 获取数据
- kotlin - 在 Exposed 中组合 AND 和 OR 条件时如何设置优先级?
- c++ - 如何创建一个没有边界的整数数组?
- java - 将整数二维数组从 java 客户端传递到 python 服务器
- java - 将 toString 与对象创建相关联
- javascript - 你可以在 React 中为变量分配一个 JSX 元素吗?
- yii2 - Yii2:在某些情况下是否可以禁用面包屑(例如移动设备)
- c# - 如何计算uwp中的每个类别
- reactjs - 如何添加唯一标头以响应应用程序?