Крюк / оверлей игры DirectX? - PullRequest
13 голосов
/ 16 апреля 2010

Может кто-нибудь сказать мне, как подключить / наложить игру DirectX на C #?

Я пытался заставить полноэкранное окно C # перекрывать игру, но это не так. После небольшого исследования я обнаружил, что мне нужно подключить игру, а затем отобразить окно C #.

Может кто-нибудь объяснить, как я это сделаю? Смогу ли я отобразить форму C # поверх игры DirectX?

Ответы [ 3 ]

16 голосов
/ 23 апреля 2010

Вы можете попробовать мой пример подключения API Direct3D 9 с помощью C # .При этом используется EasyHook сборка .NET с открытым исходным кодом, которая позволяет устанавливать хуки из управляемого кода в неуправляемые функции.

Также используется SlimDX - это управляемая оболочка с открытым исходным кодом для библиотек Direct3D.* Хитрая часть перехвата заключается в определении адресов виртуальных функций COM-объектов.Это делается в приведенном выше примере с помощью небольшой вспомогательной DLL-библиотеки C ++, которая находит адреса из таблицы VTable.[Обновление: опубликован комментарий, показывающий, как получить указатели на функции из VTable в C # также - с помощью IntPtr для объекта com]

В этом примере подключается метод EndScene для IDirect3DDevice9, который такжегде вы хотели бы нарисовать любые наложения.Что касается отображения формы в оверлее, я не уверен, что это будет так просто - я имею в виду, что вы можете достаточно легко визуализировать изображение, но вам придется захватывать входные данные и вручную отвечать / передавать события в форму ввопрос соответственно.Удачи!

5 голосов
/ 16 апреля 2010

(раскрытие: я работаю в этой компании)

Вы можете попробовать наш Deviare API , он имеет функциональные возможности для подключения COM-объектов из C #.Это набор COM-объектов, которые можно использовать на любом языке программирования (с поддержкой COM).Доступна статья с исходным кодом, показывающая, как захватывать видео и добавлять наложение: инструментарий Direct3D для захвата видео и вычисления FPS

COM Spy Console и Direct Sound Capture - это два примера, в которых реализована консоль для подключения COM-объектов, таких как DirectX.

Надеюсь, это поможет.

2 голосов
/ 16 апреля 2010

Поскольку у вас нет прямого доступа DirectX из C #, это может быть сложно.

Из моего ограниченного понимания концепции:

Крюки DirectX состоят из присоединения к контексту DirectX и манипулирования им, для этого может / не может потребоваться вмешиваться в память другой программы, что лучше всего подходит для C / C ++

Я могу ошибаться, однако это сложная тема, и моя интуиция говорит мне, что у вас могут быть проблемы в .NET

...