Вверх ↑
Ответов: 1297
Рейтинг: 47
#1: 2024-03-30 20:26:02 ЛС | профиль | цитата
Привет всем, наконец-то заработал форум после долгого перерыва. С чем это связано? Постоянно ошибка сервера 500 писало.
У меня тут проблема неразрешимая нарисовалась, полмесяца бился но так и не смог осилить.
Есть тестовая игра https://gamestracker.org/torrents/pc/action/reload_target_down/15-1-0-7517

Так вот, в ней перестает работать абсолютная адресация мыши для функций Mouse_Event и SendInput и их флаг MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE;
Работает только флаг MOUSEEVENTF_MOVE обеспечивающий относительное перемещение мыши. Вне игры на рабочем столе все работает отлично. Как быть, это невозможно, как я прочел где-то, потому что игра часто обновляет экран и принудительно сама позиционирует курсор и понимает только команды относительного его перемещения или как то это можно побороть? Пока решил кое-как задачу разбитием координат на 100-ки и десятки и единицы пикселов и перемещение последовательное по этим координатам. Но все это более менее работает в винде, притом с погрешностями +- 1-2 пикселя. А в игре тоже работает, но позиции курсора совсем другие из-за того что она меняет разрешение экрана с моих 2560 по ширине до 1280. Но и это еще не все. Функция GetCursorPos в игре показывает позицию 1279 примерно за 2/3 экрана, хотя должна лишь в конце. Вот и думаю, это руки мои с мозгом кривоваты или игру так написали или вообще винда неровная))

Код перемещения такой:


    inp[0].Itype := INPUT_MOUSE;
inp[0].mi.dwFlags := MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE;
inp[0].mi.dx := Round(ScreenWidth * 65535 / ScreenWidth);
inp[0].mi.dy := Round(ScreenHeight * 65535 / ScreenHeight);
SendInput(1, inp[0], SizeOf(TInput));
Sleep(100);
GetCursorPos(P);
// s := 'ClientCords: X:Y '+int2str(P.X) + ':' + int2str(P.Y);
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0