C ++:如果按下Windows,模拟按键并保持按键

时间:2017-12-18 20:26:35

标签: c++ winapi input keyboard

我有 C ++ 函数接收虚拟密钥并按下/释放密钥:

void SendKey (WORD wVk, bool press) {
   keybd_event(wVk, 0, press? 0 : KEYEVENTF_KEYUP, 0);
}

但它只按键1次,而不是像我预期的那样。

我正在构建一个JoyPad模拟,因此,我需要分别配置KeyDown和KeyUp,这是一个 C ++ 进程,它通过 cmd 读取密钥和类型(向下,按或发布):

#define WINVER 0x0500
#include <windows.h>
#include <iostream>

using namespace std;

void SendKey (WORD wVk, bool press) {
    keybd_event(wVk, 0, press? 0 : KEYEVENTF_KEYUP, 0);
}

void PressKey (WORD wVk) {
    SendKey(wVk, true);
    Sleep(30);
    SendKey(wVk, false);
}

int main() {
    int key;
    char type;

    while(true) {
        cin >> key;
        cin >> type;

        if(key == 0) break;
        if(type == 'd') SendKey((WORD) key, true);
        if(type == 'r') SendKey((WORD) key, false);
        if(type == 'p') PressKey((WORD) key);
    }

    return 0;
}

非常感谢,如果有人建造了类似的东西,请告诉我。

1 个答案:

答案 0 :(得分:0)

你将不得不为你想要的每个重复重复发送一个关键事件,这不会自动发生。就像真正的键盘驱动程序在初始延迟后发送重复的键事件一样。