按住钥匙一段不确定的时间

Holding a key down for an uncertain time

本文关键字:一段 不确定 时间 钥匙      更新时间:2023-10-16

我正试图按住箭头键一段不确定的时间,然后松开它。伪码:

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));

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

根据文档,time字段是时间戳,而不是持续时间(请参阅此处)。由于某种原因,文档实际上并没有说明时间戳的格式。我一直只使用0来表示这个值,它允许系统选择适当的时间戳。

我也相信你需要设置:

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

以便箭头键代码工作。

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