Как сделать виртуальный ввод аппаратного ввода?

Я хотел сделать бота для мода Гарри, и я придумал это:

#define WIN32_LEAN_AND_MEAN
#define _WIN32_WINNT 0x0500
#include <windows.h>
#include "stdafx.h"
class KeyBot
{
private:
INPUT _buffer[1];

public:
KeyBot();
void KeyUp(char key);
void KeyDown(char key);
void KeyClick(char key);
};

KeyBot::KeyBot()
{
_buffer->type = INPUT_KEYBOARD;
_buffer->ki.wScan = 0;
_buffer->ki.time = 0;
_buffer->ki.dwExtraInfo = 0;
}

void KeyBot::KeyUp(char key)
{
_buffer->ki.wVk = key;
_buffer->ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(1, _buffer, sizeof(INPUT));
}

void KeyBot::KeyDown(char key)
{
_buffer->ki.wVk = key;
_buffer->ki.dwFlags = 0;
SendInput(1, _buffer, sizeof(INPUT));
}

void KeyBot::KeyClick(char key)
{
KeyDown(key);
Sleep(10);
KeyUp(key);
}

char check_mouse(POINT xOne, POINT xTwo)
{
GetCursorPos(&xOne);
Sleep(1);
GetCursorPos(&xTwo);
if ((xTwo.x - xOne.x) > 0) {
return 'D';
}
else {
if ((xTwo.x - xOne.x) < 0) {
return 'A';
}
else {
if ((xTwo.x - xOne.x) == 0) {
return 'N';
}
}
}
}

int main()
{
KeyBot bot;
POINT xOne;
POINT xTwo;

while (1) {
if (check_mouse(xOne, xTwo) == 'A') {
bot.KeyUp(0x44);
bot.KeyDown(0x41);
}
if (check_mouse(xOne, xTwo) == 'D') {
bot.KeyUp(0x41);
bot.KeyDown(0x44);
}
if (check_mouse(xOne, xTwo) == 'N') {
bot.KeyUp(0x44);
bot.KeyUp(0x41);
}
}
return 0;
}

Это прекрасно работает, когда вы открываете блокнот или игровой чат, он удерживает «a», когда я перемещаю мышь влево, и «d», когда я перемещаю мышь вправо. Проблема в том, что когда я в игре, мой персонаж вообще не двигается. Я думаю, проблема в том, что это виртуальное нажатие клавиши, а не аппаратное, и я не знаю, как это изменить.
кто-то может изменить мой код для того, чтобы это работало?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]