1 (изменено: Malcev, 2023-03-12 19:01:52)

Тема: AHK: Хук DirectX 11 и добавление надписи

Тема для обсуждения "Хук DirectX 11 и добавление надписи".
http://forum.script-coding.com/viewtopic.php?id=17672

2

Re: AHK: Хук DirectX 11 и добавление надписи

Руки чешутся поюзать! Жаль, времени нету.

3

Re: AHK: Хук DirectX 11 и добавление надписи

А можно подробнее, что именно программа делает?

4 (изменено: Malcev, 2019-09-20 13:08:00)

Re: AHK: Хук DirectX 11 и добавление надписи

Какая именно программа?
Если вы имеете в виду этот код, то inject.ahk, запускает программу GFXTest.exe (программа, использующая directx движок), после чего инжектит в неё autohotkey.dll и запускает уже в ней код minhook.ahk.
Для перехвата вывода изображения в directx11 нам надо найти адрес IDXGISwapChain_Present метода.
https://docs.microsoft.com/en-us/window … in-present
Для этого мы создаём D3d11 устройство и получаем хендл на swap chain.
https://docs.microsoft.com/en-us/window … dswapchain
Потом высчитываем адрес метода present у swap chain.
После чего устанавливаем на этот адрес хук с помощью minhook.dll.
В самом хуке мы узнаем высоту, ширину свепчейна, хендл связанного с ним устройства и для добавления текста находим хендл на ID3D11DeviceContext interface:
https://docs.microsoft.com/en-us/window … icecontext
Потом создаем текст через FW1FontWrapper.dll и накладываем его на ID3D11DeviceContext interface.
После чего выводим получившиеся изображение на экран.

5

Re: AHK: Хук DirectX 11 и добавление надписи

Спасибо за подробности, но сначала меня интересует практический момент. Можно выводить любые символы поверх игры работающей на DirectX11? А что ещё можно? Например, использовать как wallhack или что-то ещё?

6

Re: AHK: Хук DirectX 11 и добавление надписи

Я на играх не тестировал.
Думаю, там возможен ряд защит.
Кстати, надо бы скачать какую-нибудь и протестировать.
Символы можно любые.
Думаю, что эти хаки используют также перехват Directx и шаманство с текстурами.

7

Re: AHK: Хук DirectX 11 и добавление надписи

В общем скачал пару игр для теста.
Пока получается следующее:
1) Если игра написана на движке Unity, то в полноэкранном режиме надпись пропадает.
2) Если на игре используется стимовский оверлей, то хук не ставится - видно стим сам ее хукает.
Чтобы следить за изменением размера игры нужно еще хукать IDXGISwapChain_ResizeBuffers.
Код в первом посте переписал и вставил проверку на совпадение битностей автохотки, всех длл и исходной программы.

8 (изменено: belyankin12, 2019-09-22 21:17:32)

Re: AHK: Хук DirectX 11 и добавление надписи

Так то оверлеев много существует: от банальных фрапсов/шадоуплэй до овервульфов и тех самых стимов. Потому я думаю для использования ahk скриптов в качестве оверлея все же лучше использовать соответствующую наработку. Есть даже версия с поддержкой кириллицы, однако она приводила к крашу игру, в которой я её использовал.

Меня другое интересует: получается эта библиотека как бы перехватывает изображение, которое рендерится на мониторе? Возможно неправильно объяснил, я в терминологии все же не силен, но с помощью этой библиотеки можно захватывать моментальные скриншоты полноэкранных приложений?

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

9

Re: AHK: Хук DirectX 11 и добавление надписи

Фрапс далеко не банален.
Соответствующая нароботка только для directx9.
Скриншоты, думаю, конечно, получится, но не совсем правильно.
Правильно обрабатывать скриншоты в отдельном потоке, чтоб меньше тормозило, но я не знаю, как его запустить уже из инжектнутого приложения.

10

Re: AHK: Хук DirectX 11 и добавление надписи

Автоитовцы молодцы - сделали враппер ImGui.
https://www.autoitscript.com/forum/topi … dvanced-ui
Теперь при некотором усердии можно создавать своё гуи поверх полноэкранных приложений.
https://niemand.com.ar/2019/01/01/how-t … -11-imgui/

11 (изменено: svoboden, 2020-07-13 07:45:47)

Re: AHK: Хук DirectX 11 и добавление надписи

А ImGui тоже работает в указанном окне, или он может работать автономно?

12

Re: AHK: Хук DirectX 11 и добавление надписи

Не понял вопрос.

13 (изменено: svoboden, 2020-07-14 00:25:45)

Re: AHK: Хук DirectX 11 и добавление надписи

Ну ImGui рисует меню поверх окон? А в автоит тоже так? Наверное, да. Просто я ищу меню типо imgui, но чтобы оно не внедрялось в окно. Видимо, так нельзя сделать, нужно еще создавать winapi окно.

14

Re: AHK: Хук DirectX 11 и добавление надписи

Что значит не внедрялось в окно.
ImGui создает свое окно.

15 (изменено: svoboden, 2020-07-14 03:18:35)

Re: AHK: Хук DirectX 11 и добавление надписи

Ну оно создает свое окно поверх другого окна. Получается - это меню только внедряется в чужие окна, а как самостоятельное окно оно не работает.

16

Re: AHK: Хук DirectX 11 и добавление надписи

Посмотрите пример на автоит. Там никакого другого окна нету.

17 (изменено: svoboden, 2020-07-14 03:25:41)

Re: AHK: Хук DirectX 11 и добавление надписи

Есть, вот:
https://www.autoitscript.com/forum/uploads/monthly_2020_07/image.png.051b54f48ffa6e23022901e1a2e11322.png

18

Re: AHK: Хук DirectX 11 и добавление надписи

Так это все создается библиотекой imgui, без внедрения в чужие окна.

19 (изменено: svoboden, 2020-07-16 06:40:49)

Re: AHK: Хук DirectX 11 и добавление надписи

Почти - это создает винапи окно, а imgui рисует уже в этом окне меню. Но хотелось бы без дополнительных окон чтобы отображалась gui imgui.

20 (изменено: Malcev, 2020-07-14 03:42:50)

Re: AHK: Хук DirectX 11 и добавление надписи

Гуглить, как спрятать главное окно. Может достаточно не показывать его?
_WinAPI_ShowWindow($hwnd)
Оптимальный вариант, спросить у автора автоитовского враппера.
Я эту библиотеку подробно не изучал, да и компа под рукой нет.

21 (изменено: svoboden, 2020-07-14 03:43:09)

Re: AHK: Хук DirectX 11 и добавление надписи

Так ведь скрыв главное окно, скроется и imgui окно? Нет?

22

Re: AHK: Хук DirectX 11 и добавление надписи

Ну вот и протестируйте.

23 (изменено: svoboden, 2020-07-14 04:19:52)

Re: AHK: Хук DirectX 11 и добавление надписи

Хорошо, протестирую. Так спросил уже. Только по библиотеки Imgui - не автоит. Ответ нужно ждать только, и не факт, что ответят.

24

Re: AHK: Хук DirectX 11 и добавление надписи

Ну можно и самому решение найти и попробовать реализовать на автоит.
https://github.com/ocornut/imgui/issues/225

25

Re: AHK: Хук DirectX 11 и добавление надписи

Не очень понимаю, в чём проблема. Если там есть какое-то Main Gui, то просто сделать его по размеру внутреннего окна.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

26

Re: AHK: Хук DirectX 11 и добавление надписи

А если внутреннее окно меняет свой размер, открывается/закрывается/перетаскивается?
По моей сссылке написано, что надо сделать.

27 (изменено: svoboden, 2020-07-23 07:32:12)

Re: AHK: Хук DirectX 11 и добавление надписи

С прозрачностью окна пишут, что внутреннее меню тоже становится прозрачным.
Нашел еще ответ по imgui:

@Voltz в вашем InitInstance()
после вызова CreateWindow()
сделать
SetWindowLong(hwnd, GWL_STYLE, 0);
перед вызовом ShowWindow()

Вот мой вопрос: https://github.com/Immediate-Mode-UI/Nuklear/issues/162. Там не та библиотека, но она как-раз и нужна, т.к. через GDI++ рисует меню. Впринципе, вариант рисовать поверх главного окна тоже неплохо, просто не ожидал, что так GUI рисуются, поверх главных окон.