gpt4 book ai didi

c - Winapi - 扩展键盘扫描码

转载 作者:可可西里 更新时间:2023-11-01 14:23:19 25 4
gpt4 key购买 nike

如果我想使用像 0xE0 0x1D(右 CTRL)这样的扩展扫描码来模拟按键,我将如何在 C 中模拟这样的按键?我试过用两个 INPUT 结构调用 SendInput,但只有左 CTRL 键被“按下”。对于具有“双胞胎”(Shift 和 Alt)的其他键,也会发生同样的事情。

其次,如何为“扩展”键引发 keyup 事件?

最佳答案

KEYBDINPUT结构有一个 KEYEVENTF_EXTENDEDKEY 标志来为您处理 0xE0 字节:

If specified, the scan code was preceded by a prefix byte that has the value 0xE0 (224).

尝试这样的事情:

INPUT inputs[2];
ZeroMemory(inputs, sizeof(inputs));

inputs[0].type = INPUT_KEYBOARD;
inputs[0].ki.wScan = 0x1D;
inputs[0].ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_EXTENDEDKEY;

CopyMemory(&inputs[1], &inputs[0], sizeof(INPUT));
inputs[1].ki.dwFlags |= KEYEVENTF_KEYUP;

SendInput(2, inputs, sizeof(INPUT));

但是,我建议使用虚拟键而不是扫描码:

INPUT inputs[2];
ZeroMemory(inputs, sizeof(inputs));

inputs[0].type = INPUT_KEYBOARD;
inputs[0].ki.wVk = VK_CONTROL;
inputs[0].ki.dwFlags = KEYEVENTF_EXTENDEDKEY;

CopyMemory(&inputs[1], &inputs[0], sizeof(INPUT));
inputs[1].ki.dwFlags |= KEYEVENTF_KEYUP;

SendInput(2, inputs, sizeof(INPUT));

但是,如果你绝对需要一个扫描码,至少看看MapVirtualKey()将虚拟键转换为扫描码:

inputs[0].type = INPUT_KEYBOARD;
inputs[0].ki.wScan = MapVirtualKey(VK_RCONTROL, MAPVK_VK_TO_VSC);
inputs[0].ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_EXTENDEDKEY;

关于c - Winapi - 扩展键盘扫描码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36972524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com