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.