如何在SendInput中使用扩展扫描码
How to use extended scancodes in SendInput
为了模拟一些键,我必须向那里发送扫描码,为此我使用WinAPI中的SendInput()函数,在大多数情况下它都很好,但如何使用它来发送"Pause"等键的扫描码?该键生成6字节扫描码(E1 1D 45 E1 9D C5),因为KEYBDINPUT结构中的扫描码具有WORD类型,即只允许使用最多2字节的扫描码。我尝试了1D45扫描代码和带有KEYEVENTF_EXTENDEDKEY标志的9DC5,建议它根据内容应用E0\E1代码。我还尝试发送六个1字节命令的序列。但所有这些都不起作用。
事实上,我在这里找到了解决方案,嵌入到图形中:https://learn.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-6.0/aa299374(v=vs.60)
请参阅代码。这是C#,但你会明白的。
inputs = new[]
{
new WinAPI.INPUT
{
type = WinAPI.INPUT_KEYBOARD,
u = new WinAPI.InputUnion
{
ki = new WinAPI.KEYBDINPUT()
{
wScan = (ushort) 0xe0,
wVk = (ushort) 0,
dwFlags = (ushort) dwFlags,
dwExtraInfo = WinAPI.GetMessageExtraInfo()
}
}
},
new WinAPI.INPUT
{
type = WinAPI.INPUT_KEYBOARD,
u = new WinAPI.InputUnion
{
ki = new WinAPI.KEYBDINPUT()
{
wScan = (ushort) tscancode,
wVk = (ushort) tvk,
dwFlags = (ushort) dwFlags,
dwExtraInfo = WinAPI.GetMessageExtraInfo()
}
}
}
};
相关文章:
- 是否可以通过C++扩展强制多个python进程共享同一内存
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 扩展光电二极管探测器以支持多个传感器
- 检查不带转换的扫描格式
- C++中的VLA,扩展名为std=C++11
- OpenGL 和 GLM 矩阵无法正确扩展,总是按比例缩小
- 基于范围的 for 循环:迭代使用一个元素扩展的向量
- C++返回 Numpy 数组的 Python 扩展模块
- 扩展可变参数模板中的变量名称
- 扩展C++生成的代码的模板参数类型名称
- 我想通过带有C++和Python的插件创建一个可扩展的应用程序
- VSCode IntelliSense无法识别SDL框架的SDL_image扩展库
- 将元组类型扩展为可变参数模板?
- 如何按文件扩展名引用文件夹中的文件
- HDF5Cpp 扩展复合数据集超板问题
- MSVC中的宏观扩展问题
- 嵌套参数包扩展失败
- C4204:使用的非标准扩展:非常量聚合初始值设定项
- 如何在SendInput中使用扩展扫描码