Симуляция нажатия клавиш
Решил я написать прогу по брутфорсу паролей к одной игре(Rust), и суть в том, что у меня будут вводиться четырёхзначные числа с перебором. На питоне есть такая замечательная библиотека как pyautogui позволяющая симулировать нажатия клавиш с клавиатуры, такая же есть и на плюсах но находится в Windows.h. Итак, я написал проги и на плюсах, и на питоне, протестил, в блокноте всё работает исправно. Но, вот проблема, программа на плюсах работает как-то странно, сперва числа вводятся, а потом после повторных попыток игра будто этих нажатий не замечает, а вот на питоне всё работает довольно спокойно. Это какая-то защита от макросов? Тогда в чём разница этих двух библиотек/языков, они по другому реализованы? Код: (Заранее запикаю звёздочками матюкню в коде)
C++
#include <iostream>
#include <Windows.h>
using namespace std;
int main()
{
setlocale(LC_ALL, "Rus");
int Num[4] = {0,0,0,0};
int a = 0, msg = 0, tm = 80;
char cNum[4];
INPUT input;
//Ввод данных
cout << "Прога для брутфорса 4х значных паролей (т.е. от 0 до 9999).\nMade by Schetovod.\n\nДля выхода из проги нажми Delete" << endl;
cout << "Achtung!!! Разработчик данной программы индус, поэтому ввод числа начнётся со следующего по счёту.\nНапример: введено 5000. При нажатии F2 будет введено 5001" << endl;
RSstartApp:
Sleep(100);
cout << "С какого числа начнём взламывать ****?" << endl;
TryAgain:
while (true) {
cin >> a;
if (a < 10000 && a >= 0) {
break;
}
msg++;
if (msg == 3) {
cout << "******. У тебя руки чтоли кривые? Введи.*****.нормально.*******.****.число." << endl;
goto TryAgain;
}
if (msg == 8) {
cout << "******* чтоли? Вводи ЧЕТЫРЁХЗНАЧНОЕ число и не *********!" << endl;
goto TryAgain;
}
if (msg == 11) {
cout << "Тебе как в палату интернет ваще провели, уважаемый?" << endl;
goto TryAgain;
}
if (msg == 15) {
cout << "*** иди на ***. Мне за эту работу не платили." << endl;
return 0;
}
cout << "Диапазон от 0 до 9999!!!" << endl;
}
for (int i = 3; i>=0; i--) {
Num[i] = a % 10;
a /= 10;
}
a--;
msg = 0;
cout << "Для введения чисел нажми F2.\nДля повторного ввода числа тыкни Правый ALT.\nЧтобы ввести новую комбинацию нажми Правый CTRL." << endl;
//Начало работы
while (true) {
Sleep(5);
if (GetAsyncKeyState(VK_DELETE)) {
return 0;
}
if (GetAsyncKeyState(VK_RCONTROL)) {
goto RSstartApp;
}
if (GetAsyncKeyState(VK_RMENU)) {
for (int i = 0; i <= 3; i++) {
cout << Num[i];
cNum[i] = Num[i] + '0';
}
cout << endl;
for (int i = 0; i < 4; i++) {
ZeroMemory(&input, sizeof(input));
input.type = INPUT_KEYBOARD;
input.ki.wVk = VkKeyScanA(cNum[i]);
SendInput(1, &input, sizeof(INPUT));
ZeroMemory(&input, sizeof(input));
input.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(1, &input, sizeof(INPUT));
Sleep(1000);
}
}
if (GetAsyncKeyState(VK_F2)) {
Num[3]++;
if (Num[3] > 9) {
Num[2]++;
Num[3] = 0;
}
if (Num[2] > 9) {
Num[1]++;
Num[2] = 0;
}
if (Num[0] >= 9 && Num[1] >= 10) {
cout << "Комбинация не была найдена.\nВведи другое число для взлома, братан." << endl;
goto RSstartApp;
}
for (int i = 0; i <= 3; i++) {
cout << Num[i];
cNum[i] = Num[i] + '0';
}
cout << endl;
for (int i = 0; i < 4; i++) {
ZeroMemory(&input, sizeof(input));
input.type = INPUT_KEYBOARD;
input.ki.wVk = VkKeyScanA(cNum[i]);
SendInput(1, &input, sizeof(INPUT));
ZeroMemory(&input, sizeof(input));
input.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(1, &input, sizeof(INPUT));
Sleep(tm);
tm += 100;
}
tm = 80;
}
}
}
Python
import pyautogui
import keyboard
ar = str(input("V0.1 С какого числа начнём взламывать **** этим *******?: "))
nu = 0
while 1:
keyboard.wait('F2')
pyautogui.typewrite(ar, interval=0.04)
nu = int(ar)
nu+=1
ar = str(nu)