gpt4 book ai didi

c# - keybd_event KEYEVENTF_EXTENDEDKEY 需要说明

转载 作者:太空狗 更新时间:2023-10-29 18:03:21 26 4
gpt4 key购买 nike

documentation它说:

KEYEVENTF_EXTENDEDKEY (0x0001):如果指定,扫描码前面有一个值为 0xE0 (224) 的前缀字节。

谁能解释一下这是什么意思?

这有什么区别:

keybd_event(RIGHT, 0, 0, 0);
keybd_event(RIGHT, 0, 2, 0);

还有这个:

keybd_event(RIGHT, 0, 1 | 0, 0);
keybd_event(RIGHT, 0, 1 | 2, 0);

因为当我执行这段代码时,我看不出有什么不同?

另外,“byte bScan”是做什么用的?在描述中它是: key 的硬件扫描码。什么意思?

最佳答案

这里的两个答案都是错误的。我不明白为什么人们会投票给错误的答案??

两个答案都表明该标志是无关紧要的。这是完全错误的。该标志与键盘无关。

正确答案是只有01到7F的扫描码,但虚拟键的范围是01到FF。

因此,随着键盘的发展,某些扫描码必须具有双重分配。例如,在我的键盘上,扫描码 0x45 分配给了 NumLock 键和 Pause 键。

为了区分它们,键盘为 NumLock 键发送扩展键标志,但不为暂停键发送扩展键标志。

还有其他几个键具有双重分配,例如所有媒体键。

运行 Visual Studio 工具附带的 Spy++,仅过滤 WM_KEYDOWN 并启用“解码消息参数”,然后在文本编辑器中点击一些键。

Spy++ 会告诉你哪些键设置了标志,哪些键没有设置。

这里是 Spy++ 的输出:

P WM_KEYDOWN nVirtKey:VK_NUMLOCK cRepeat:1 ScanCode:45 fExtended:1 fAltDown:0 fRepeat:0 fUp:0
P WM_KEYDOWN nVirtKey:VK_PAUSE cRepeat:1 ScanCode:45 fExtended:0 fAltDown:0 fRepeat:0 fUp:0

另一个例子是扫描码 2E,它分配给字母“C”和我键盘上的 VK_VOLUME_DOWN。

您必须以完全相同的方式对其进行编程,否则使用 keybd_event() 进行键盘注入(inject)将失败,因为按下了您想要的另一个键。

不要信任 MapVirtualKeyEx(MAPVK_VK_TO_VSC_EX) (>= Vista),因为它不会返回某些键的扩展标志,尽管它们是扩展键,例如 VK_LEFT例子。此函数中的另一个错误是它返回 VK_PAUSE 键的扩展标志 (E1),尽管该键未扩展。

关于c# - keybd_event KEYEVENTF_EXTENDEDKEY 需要说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21197257/

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