21xrx.com
2025-03-26 23:57:46 Wednesday
文章检索 我的文章 写文章
C++模拟键盘实现
2023-07-01 17:15:28 深夜i     24     0
C++ 模拟 键盘 实现

C++模拟键盘实现方法

C++作为一门强大的编程语言,可以实现很多功能,其中模拟键盘功能是较为实用的功能之一。在很多应用场合中,需要通过软件模拟键盘按键,比如自动化测试、游戏外挂等应用场景。下面我们来介绍几种C++模拟键盘的实现方法。

一、使用SendInput函数实现模拟键盘

SendInput 函数是 Windows API 中的一个函数,它可以将模拟的键盘、鼠标等输入数据发送到系统的输入队列中。模拟按键可以使用 SendInput 函数实现,具体使用方法如下:

1. 头文件和命名空间:

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

2. 定义模拟按键结构体:

typedef struct tagINPUT {
  DWORD type;
  union
    MOUSEINPUT   mi;
    KEYBDINPUT   ki;
    HARDWAREINPUT  hi;
   DUMMYUNIONNAME;
} INPUT, *PINPUT, *LPINPUT;

3. 定义按键码:

#define KEY_SCANCODE_SPACE 0x39
#define KEY_SCANCODE_A 0x41
#define KEY_SCANCODE_B 0x42
//按照需求定义需要模拟的按键

4. 通过 SendInput 函数模拟按键:

void SimulateKeyPress(WORD vkCode) {
  INPUT Input ={};
  Input.type = INPUT_KEYBOARD;
  Input.ki.wVk = vkCode;
  Input.ki.dwFlags = 0;
  SendInput(1, &Input, sizeof(INPUT));
}
void SimulateKeyRelease(WORD vkCode) {
  INPUT Input ={};
  Input.type = INPUT_KEYBOARD;
  Input.ki.wVk = vkCode;
  Input.ki.dwFlags = KEYEVENTF_KEYUP;
  SendInput(1, &Input, sizeof(INPUT));
}
void PressKey(WORD vkCode, int delay) {
  SimulateKeyPress(vkCode);
  Sleep(delay);
  SimulateKeyRelease(vkCode);
}

5. 调用 PressKey 函数按照定义模拟按键:

int main() {
  PressKey(KEY_SCANCODE_A, 500);
  PressKey(KEY_SCANCODE_B, 500);
  PressKey(KEY_SCANCODE_SPACE, 500);
  return 0;
}

二、使用WinAPI message 实现模拟键盘

两种模拟键盘的方法都是基于WindowsAPI,除了使用 SendInput 函数模拟按键外,还可以使用 WinAPI message 实现模拟。具体步骤如下:

1. 定义模拟按键的函数:

void simulateKeyPress(UINT vkCode, HWND window) {
  SendMessage(window, WM_KEYDOWN, vkCode, 0);
}
void simulateKeyRelease(UINT vkCode, HWND window) {
  SendMessage(window, WM_KEYUP, vkCode, 0);
}
void SimulateKey(UINT vkCode, HWND window, int delay) {
  simulateKeyPress(vkCode, window);
  Sleep(delay);
  simulateKeyRelease(vkCode, window);
}

2. 调用 SimulateKey 函数模拟按键:

SimulateKey('A', window, 1000);
SimulateKey('B', window, 1000);

以上就是两种创造C++模拟键盘的方法,开发者可以根据自己的需求进行选择使用。

  
  

评论区

请求出错了