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