RockHammer Опубликовано 2 февраля, 2015 Поделиться Опубликовано 2 февраля, 2015 (изменено) Всем привет. Делать сейчас нечего, хочу реализовать перехват нажатия клавиш на с++ (для своего внутреннего чита).Однако, не с помощью функции 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)Знает ли кто, как поправить? Изменено 2 февраля, 2015 пользователем RockHamer Ссылка на комментарий Поделиться на другие сайты Поделиться
A1t0r Опубликовано 2 февраля, 2015 Поделиться Опубликовано 2 февраля, 2015 (изменено) Знает ли кто, как поправить?if (KeyPressed = VK_NUMPAD0) //проверочкаЭто не проверка на равенство, а присваивание. Надоif (KeyPressed == VK_NUMPAD0) //проверочка Изменено 2 февраля, 2015 пользователем A1t0r 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 2 февраля, 2015 Поделиться Опубликовано 2 февраля, 2015 Опередил меня ) Ссылка на комментарий Поделиться на другие сайты Поделиться
A1t0r Опубликовано 2 февраля, 2015 Поделиться Опубликовано 2 февраля, 2015 Опередил меня ) Счёт 1:1 Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 2 февраля, 2015 Автор Поделиться Опубликовано 2 февраля, 2015 (изменено) А у вас тут, я смотрю, личные счеты))) По делу - спасибо, поправлю) Upd: теперь вообще не работает! Не выводит ничего! Изменено 2 февраля, 2015 пользователем RockHamer Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 3 февраля, 2015 Поделиться Опубликовано 3 февраля, 2015 Не выводит потому, что _getch, если я правильно помню, считывает ASCII код клавишы, а VK_NUMPAD и так далее - виртуальные коды клавиш, и они отличаются. Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 3 февраля, 2015 Поделиться Опубликовано 3 февраля, 2015 А чем не подходит GetAsyncKeyState? Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 3 февраля, 2015 Автор Поделиться Опубликовано 3 февраля, 2015 (изменено) А чем не подходит GetAsyncKeyState?Бывают баги и случайные нажатия. Мне сказали, что я должен так думать. Upd: перешел на GetAsyncKeyState теперь все работает, правда немного бесит то, что можно нажать один раз на клавишу - а эффект будет будто мы на нее 5 раз нажали.Если на условии будет не cout, а, к примеру, взлом памяти - то это может замедлить процесс или привести к крашу. Изменено 3 февраля, 2015 пользователем RockHamer Ссылка на комментарий Поделиться на другие сайты Поделиться
gmz Опубликовано 3 февраля, 2015 Поделиться Опубликовано 3 февраля, 2015 (изменено) Бывают баги и случайные нажатия. Мне сказали, что я должен так думать. Upd: перешел на GetAsyncKeyState теперь все работает, правда немного бесит то, что можно нажать один раз на клавишу - а эффект будет будто мы на нее 5 раз нажали.Если на условии будет не cout, а, к примеру, взлом памяти - то это может замедлить процесс или привести к крашу. вроде так:if(GetAsyncKeyState(key) & 0x8000 != 0)на фасм оно выглядит так (в еах всегда 0/1)invoke GetAsyncKeyState,VK_INSERTand eax,0x8000shr eax,0xF +тебе надо сохранять результат и проверять зажата клавиша/не можно хукнуть проц окна игрухи через GetWindowLongW/SetWindowLongW +GWL_WNDPROC +оформить саму проц окна в которой будет твой код, тогда GetAsyncKeyState не нужен ps этот твой Sleep(100); он че прям в потоке игры? Lol Изменено 3 февраля, 2015 пользователем gmz Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения