• XSS.stack #1 – первый литературный журнал от юзеров форума

фикс InjectMouseInput_t

mddbs

RAID-массив
Пользователь
Регистрация
09.02.2024
Сообщения
98
Реакции
3
Всем доброго дня. Я использую функцию InjectMouseInput для перемещения курсора мыши.
Код:
InjectedInputMouseInfo info = { 0 };
info.DeltaX = (int)targetX - (int)currentX;
info.DeltaY = (int)targetY - (int)currentY;
InjectMouseInput(&info, 1);
ptr->flag = 0;
FreeLibrary(user32);
Если вызывать её слишком часто, игра начинает сильно фризить, появляются лаги и потери пакетов. Складывается впечатление, что игра просто не справляется с таким количеством запросов. Уменьшение частоты вызовов немного улучшает ситуацию, но полностью проблему не решает.

Интересно, что проблема проявляется не у всех пользователей. Я пытался найти закономерность — думал, возможно, это связано с мощностью процессора (мол, чем мощнее, тем больше вызовов и, соответственно, больше лагов), но никакой зависимости не обнаружил. Лагает именно игра, а не система в целом. У кого-то всё отлично работает, а у кого-то просто ужас и не понятно почему так

Сильно снижать частоту вызовов тоже не вариант — тогда всё начинает выглядеть дёргано, теряется плавность, что критично.

Обращаюсь к вам в надежде получить идеи или предположения о возможных причинах и способах решения этой проблемы. Буду благодарен за любые советы

Заранее спасибо :smile10:
 
Не разбирался с этой функцией, но
FreeLibrary(user32);
если ты это вызываешь в цикле и ещё до грузишь user32.dll, то это точно плохо.

А не думал насчёт того, чтобы переделать управление углами через хуки? Это быстрее, синхрон с игрой 100%, меньше систему грузит, как минимум потому что не нужно вызывать лишнюю функцию.
 
Не разбирался с этой функцией, но

если ты это вызываешь в цикле и ещё до грузишь user32.dll, то это точно плохо.

А не думал насчёт того, чтобы переделать управление углами через хуки? Это быстрее, синхрон с игрой 100%, меньше систему грузит, как минимум потому что не нужно вызывать лишнюю функцию.
Через углы можно но это сильно скажется на безопасности софта(так что не вариант) на данный момент софт не взаимодействует с памятью игры.

user32.dll освобождается в самом конце, из за особенности обхода при каждом вызове необходимо подгружать user32.dll заново
 
Бро, тот факт, что ты подгружаешь user32.dll один раз достаточно, чтобы использовать её потом на протяжении всего проекта, можешь вызывать её потом для винапи через GetModuleHandle, а освобождать её вообще бред на цикле, делай это только в конце выполнения программы, HANDLE/HMODULE , где она висит у памяти не сильно грузит, а если ты один раз освобождаешь, то ей и настает пиздец, если не загрузишь через LoadLibrary заново, если не загрузишь, то он пытается вызвать функции из пустоты, а тебе , если ты функции вызываешь уже из Windows.h просто по названию, а не вручную вызывая библиотеку и потом функции из неё, то и LoadLibrary не пригодится, она уже под капотом загрузится, чтобы функции работали
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх