Hook/Overlay DirectX-игра?
Может ли кто-нибудь сказать мне, как перехватить/наложить игру DirectX на С#?
Я попытался получить полноэкранное окно С#, чтобы совместить игру, однако это не будет.
Изучив немного, я узнал, что мне нужно подключить игру, а затем отобразить окно С#.
Может кто-нибудь объяснить, как я это сделаю?
Смогу ли я отобразить форму С# в игре DirectX?
Ответы
Ответ 1
(раскрытие: я работаю для этой компании)
Вы можете попробовать наш Deviare API, он имеет функциональность, чтобы перехватывать COM-объекты из С#.
Это набор COM-объектов, которые можно использовать с любого языка программирования (поддерживающего COM). Доступна статья с исходным кодом, показывающая, как захватить видео и добавить оверлей: приложения Direct3D для захватить видео и рассчитать FPS
Консоль COM-шпиона и Прямой захват звука это два примера, которые реализуют консоль для подключения COM-объектов, таких как DirectX.
Надеюсь, что это поможет.
Ответ 2
Вы можете попробовать мой пример по подключению Direct3D 9 API с помощью С#. Это использует EasyHook сборку с открытым исходным кодом .NET, которая позволяет вам устанавливать перехватчики из управляемого кода в неуправляемые функции.
Также используется SlimDX - это управляемая оболочка с открытым исходным кодом вокруг библиотек Direct3D.
Сложная часть подключения - это определение адресов виртуальных функций COM-объектов. Это делается в приведенном выше примере с использованием небольшой вспомогательной DLL-библиотеки С++, которая находит адреса из VTable. [Обновление: есть комментарий, который показывает, как получить указатели на функции из VTable в С# также - с учетом IntPtr для COM-объекта]
В этом примере используется метод EndScene для IDirect3DDevice9, который также предназначен для рисования любых наложений. Что касается отображения формы в оверлее, я не уверен, что это будет так просто - я имею в виду, что вы можете сделать изображение достаточно легко, но вам придется записывать входные данные и вручную отвечать/передавать события через форму в форме вопрос надлежащим образом. Удачи!
Ответ 3
Поскольку у вас нет прямого доступа к DirectX с С#, это может быть сложно.
Из моего ограниченного понимания понятия:
DirectX Hooks состоит из присоединения к Контексту DirectX и манипулирования им, это может/не может потребовать возиться с другой программной памятью, что лучше всего подходит для C/С++
Возможно, я ошибаюсь, однако это расширенная тема, и моя кишка говорит, что у вас могут быть проблемы с .NET.