Перейти к содержанию

Перехват нажатия клавиш


Рекомендуемые сообщения

Всем привет.

 

Делать сейчас нечего, хочу реализовать перехват нажатия клавиш на с++ (для своего внутреннего чита).

Однако, не с помощью функции GetKeyAssync (название искажено, т.к. не помню точного названия)

Я вызываю в цикле функцию _getch() - расшифровывается как Get Char (достать символ).

[spoiler = "Вот код"] 

#include <iostream>#include <conio.h>#include <cmath>#include <Windows.h>using namespace std;void KeyHack(){	char KeyPressed; //тут создаем нашу односимвольную переменную	while (true)	{		KeyPressed = _getch(); //присваиваем значение переменной - символ, выхваченый из потока		if (KeyPressed = VK_NUMPAD0) //проверочка		{			cout << "Вы нажали - Numpad 0"; //ну тут собственно можно сделать вызов функции затирания памяти (типо чит. или что-то еще)		}		KeyPressed = false; //обнуляем переменную. хз зачем, знакомый проггер сказал, что это правила хорошего тона.		Sleep(100); //ну и баю-бай, чтобы не тормозить систему слишком сильно	}	}int main(){	setlocale(LC_ALL, "Russian");	KeyHack(); //в потом втыкаем, чтоб заработало. (делалось в консоли)	_getch();	return false;} 

Код не работает. Он срабатывает на всякую клавишу так, будто это та, что в условии (VK_NUMPAD0)

Знает ли кто, как поправить?

Изменено пользователем RockHamer
Ссылка на комментарий
Поделиться на другие сайты

Знает ли кто, как поправить?
if (KeyPressed = VK_NUMPAD0) //проверочка

Это не проверка на равенство, а присваивание. Надо

if (KeyPressed == VK_NUMPAD0) //проверочка
Изменено пользователем A1t0r
  • Плюс 2
Ссылка на комментарий
Поделиться на другие сайты

А у вас тут, я смотрю, личные счеты)))

 

По делу - спасибо, поправлю)

 

Upd: теперь вообще не работает! Не выводит ничего!

Изменено пользователем RockHamer
Ссылка на комментарий
Поделиться на другие сайты

Не выводит потому, что _getch, если я правильно помню, считывает ASCII код клавишы, а VK_NUMPAD и так далее - виртуальные коды клавиш, и они отличаются.

Ссылка на комментарий
Поделиться на другие сайты

А чем не подходит GetAsyncKeyState?

Бывают баги и случайные нажатия. Мне сказали, что я должен так думать.

 

Upd: перешел на  GetAsyncKeyState   теперь все работает, правда немного бесит то, что можно нажать один раз на клавишу - а эффект будет будто мы на нее 5 раз нажали.

Если на условии будет не cout, а, к примеру, взлом памяти - то это может замедлить процесс или привести к крашу. 

Изменено пользователем RockHamer
Ссылка на комментарий
Поделиться на другие сайты

Бывают баги и случайные нажатия. Мне сказали, что я должен так думать.

 

Upd: перешел на  GetAsyncKeyState   теперь все работает, правда немного бесит то, что можно нажать один раз на клавишу - а эффект будет будто мы на нее 5 раз нажали.

Если на условии будет не cout, а, к примеру, взлом памяти - то это может замедлить процесс или привести к крашу. 

вроде так:if(GetAsyncKeyState(key) & 0x8000 != 0)

на фасм оно выглядит так (в еах всегда 0/1)

invoke GetAsyncKeyState,VK_INSERT

and eax,0x8000

shr eax,0xF

 

+тебе надо сохранять результат и проверять зажата клавиша/не

 

можно хукнуть проц окна игрухи через GetWindowLongW/SetWindowLongW +GWL_WNDPROC +оформить саму проц окна в которой будет твой код, тогда GetAsyncKeyState не нужен

 

ps этот твой Sleep(100); он че прям в потоке игры? Lol

Изменено пользователем gmz
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.