gpt4 book ai didi

c++ - 如何使用 SendInput 重复击键?

转载 作者:行者123 更新时间:2023-11-30 04:40:15 24 4
gpt4 key购买 nike

我正在用 VC++ 编写一个小工具来记录击键以便稍后重放,这是一个宏记录器。它已经工作得很好,使用键盘钩子(Hook)函数读取每个按键和释放事件。回放与 SendInput() 函数一起工作并且通常也可以正常工作 - 除了重复击键。每次松开后按几次键是没有问题的。但是按住不放,对于要重复输入的字符,可以记录,但在某些应用中只能回放。有些接受并多次输入字符,有些只输入一次。 (这是可重现的。)宏记录器本身也可以通过其监控 Hook 看到在播放过程中按下的键只被按下了一次。

那么,如何让 SendInput 发送单个键的多个后续击键,而无需在其间自行添加按键释放事件?发送一系列 [press] [press] [press] ... [release] 并不总是有效。

最佳答案

您可以在一次 SendInput 调用中发送多个键,但您仍然需要在每个字符上设置 keyup 标志,以便在每种类型的击键上获得相同的结果。

如果你需要发送“aa”,你可以这样做。

INPUT input[4];

input[0].type = INPUT_KEYBOARD;
input[0].ki.wVk = 0;
input[0].ki.wScan = 'a';
input[0].ki.dwFlags = 0;

input[1].type = INPUT_KEYBOARD;
input[1].ki.wVk = 0;
input[1].ki.wScan = 'a';
input[1].ki.dwFlags = KEYEVENTF_KEYUP;

input[2].type = INPUT_KEYBOARD;
input[2].ki.wVk = 0;
input[2].ki.wScan = 'a';
input[2].ki.dwFlags = 0;

input[3].type = INPUT_KEYBOARD;
input[3].ki.wVk = 0;
input[3].ki.wScan = 'a';
input[3].ki.dwFlags = KEYEVENTF_KEYUP;

SendInput(4, input, sizeof(INPUT));

关于c++ - 如何使用 SendInput 重复击键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1643676/

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