c++ - 在不确定的时间内按住某个键

标签 c++ c winapi io output

我试图按住箭头键一段不确定的时间,然后在这之后释放它。 伪代码:

SendKey(VK_RIGHT, KEY_DOWN);

// Do something

SendKey(VK_RIGHT, KEY_UP)

我使用 Visual Studio 2012 和 Windows 7-64 位。 我已经搜索了很多时间并尝试了这样的事情:

#include <Windows.h>
#include <WinUser.h>
using namespace std;

[...]

INPUT Event = {0};
Event.type = INPUT_KEYBOARD;
Event.ki.dwFlags = 0;
Event.ki.wScan = ::MapVirtualKey(VK_RIGHT, MAPVK_VK_TO_VSC);
Event.ki.time = 2000;                                   // hold 2 sek. ?
Event.ki.dwExtraInfo = 0;
Event.ki.wVk = VK_RIGHT;                                    // (Right-Arrow)

SendInput(1, &Event, sizeof(Event));        // hold
Sleep(1000);                                // do something (waiting in this case)
Event.ki.dwFlags = KEYEVENTF_KEYUP;         // release 
SendInput(1, &Event, sizeof(Event));

但这并没有按预期工作,我不知道出了什么问题。 按键按下正确,但未按住。 提前致谢。

最佳答案

根据documentationtime 字段是时间戳而不是持续时间(请参阅 here )。由于某种原因,文档实际上并没有说明时间戳的格式。我一直只使用 0 作为该值,让系统选择适当的时间戳。

我还相信您需要设置:

Event.ki.dwFlags = KEYEVENTF_EXTENDEDKEY;
...
Event.ki.dwFlags = KEYEVENTF_KEYUP | KEYEVENTF_EXTENDEDKEY;

让箭头键代码发挥作用。

此外,就像船长提到的那样,使用适当的 VK_ 宏 (VK_LEFT)。请注意,0x27 实际上定义为 VK_RIGHT,这可能是代码中的另一个问题。

关于c++ - 在不确定的时间内按住某个键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26452735/

相关文章:

c - 如何为非 SELECT 命令转储 PGresult

c - 为什么我的平均值不是正确答案? (求均值的C代码程序)

c - waitid会消耗SIGCHLD吗?

C++ Windows 程序检测程序退出 |没有 GUI 或控制台

c++ - 当遇到很​​长的循环时,得到 Segmentation Fault :11 or memory allocation error

c++ - 在C++中的运行时删除数组以节省一些内存

C++帮助类继承

C++随机数重复防止

c++ - DeviceIoControl 返回意外的物理扇区大小

c++ - GetThreadContext 寄存器总是返回 0xCCCCCCCC