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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C ++:如果按下Windows,模拟按键并保持按键相关的知识,希望对你有一定的参考价值。

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

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

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

我正在构建一个JoyPad模拟,所以,我需要分别配置KeyDown和KeyUp,这是一个小的C ++进程,它通过cmd读取密钥和类型(Down,Press或Release):

#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;
}

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

答案

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

以上是关于C ++:如果按下Windows,模拟按键并保持按键的主要内容,如果未能解决你的问题,请参考以下文章

NSTextView (macOS) 中的按键事件

时间:2019-04-10 标签:c++win32SendInput()

C语言 如何在一段时间内检测键盘是不是按下

如何模拟多媒体按键(C)?

C#:在游戏中模拟按键

模拟交通灯 单片机C51,要电路图和程序