Перейти к содержанию
Авторизация  
sooqua

Crimsonland: Как вывести курсор за форму игры?

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

Адреса координат курсора внутри формы:

X - 00484ECC, Y - 00484ED0

Команды, которые срабатывают, если пытаешься вывести курсор за форму (по Y):

0040C89D - C7 05 D04E4800 00000000 - mov [00484ED0],00000000

0040C8F0 - D9 1D D04E4800 - fstp dword ptr [00484ED0] : [(float)308.0000]

По X:

0040C8C6 - D9 1D CC4E4800 - fstp dword ptr [00484ECC] : [(float)450.0000]

0040C880 - C7 05 CC4E4800 00000000 - mov [00484ECC],00000000

Если их занопить, можно будет двигать курсор "за пределы" формы, но его не видно. Т.е. он всё еще в игре :D

Как бы сделать, чтобы можно было убирать курсор из формы, при этом чтоб он менялся на стандартный виндовский, а когда снова попадал бы в форму с игрой, менялся бы на игровую "стрелку"?

Поделиться сообщением


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

Говоришь, что если окно делает MouseLeave(), или если Rectangle окна игры не содержит координат мыши (ага), то меняешь курсор принудительно. Т.е. если винда хочет нарисовать курсор за пределами игрового окна - что-то типа SetCursor(), файл курсора можно взять прямо из ресурсов игры. Или найди событие, отвечающее за смену курсора - отладь его при переходе указателя из окна игры в рабочий стол, ну и отключи нафиг смену указателя на текущий виндовый.

Правда, нафига такие костыли? :D

Короче, хук на GetMessage, там проверка на [вот это], если она проходит - то [вот это]. Не то, чтобы офигеть, как оптимально, но просто в реализации и работать будет.

Поделиться сообщением


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

В общем такие дела:

Нашёл инструкцию, которая скрывает курсор:

"DINPUT8.dll"+C0D5 - call dword ptr [6CD711F4] ; [showCursor]

И нашёл вредоносную команду, которая блокирует доступ к другим окнам:

"DINPUT8.dll"+528E - call 6CD7C5DE

Именно после её выполнения (в отладке проверял) на другие окна уже нельзя нажать и тем самым активировать их.. Но если её занопить (и прилагающийся push, разумеется), игра зависает. Не пойму, почему))

Поделиться сообщением


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

В общем такие дела:

Нашёл инструкцию, которая скрывает курсор:

"DINPUT8.dll"+C0D5 - call dword ptr [6CD711F4] ; [showCursor]

И нашёл вредоносную команду, которая блокирует доступ к другим окнам:

"DINPUT8.dll"+528E - call 6CD7C5DE

Именно после её выполнения (в отладке проверял) на другие окна уже нельзя нажать и тем самым активировать их.. Но если её занопить (и прилагающийся push, разумеется), игра зависает. Не пойму, почему))

Предполагаю, то что инструкция работает не только с курсором.

Поделиться сообщением


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

Предполагаю, то что инструкция работает не только с курсором.

Оказалось точно так) В ней была еще одна инструкция, внутри которой еще одна :D Занопил её - и сказка))

Только вопрос - я ведь в системной dll'ке занопил команду, будут ли остальные программы, использующие её работать корректно?

Поделиться сообщением


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

Оказалось точно так) В ней была еще одна инструкция, внутри которой еще одна :D Занопил её - и сказка))

Только вопрос - я ведь в системной dll'ке занопил команду, будут ли остальные программы, использующие её работать корректно?

Ящитаю, что ты её занопил в инстансе дллки для конкретно процесса игры, а остальные программы будут подгружать себе новую.

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

×

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

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