按住钥匙不确定的时间

时间:2014-10-19 16:33:51

标签: 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));

但是这没有预期的效果,我不知道出了什么问题。 正确按下键,但不能按住。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

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

我也相信你需要设置:

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

使箭头键代码有效。

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