挂钩/覆盖DirectX游戏?

谁能告诉我如何在C#中挂钩/覆盖DirectX游戏?

我已经尝试使用全屏C#窗口来重叠游戏,但它不会。 经过一番研究后,我发现我需要挂钩游戏,然后显示C#窗口。

任何人都可以解释我会怎么做? 我可以在DirectX游戏上显示C#表单吗?

(披露:我为这家公司工作)

您可以尝试我们的Deviare API ,它具有从C#挂钩COM对象的function。 它是一组可以从任何编程语言(支持COM)使用的COM对象。 有一篇文章,其中包含如何捕获video和添加叠加层的源代码: 检测Direct3D应用程序以捕获video并计算FPS

COM Spy Console和Direct Sound Capture是两个实现控制台来挂钩COM对象(例如DirectX)的示例。

希望能帮助到你。

您可以尝试使用C#挂钩Direct3D 9 API 。 这使用EasyHook作为一个开源.NET程序集,允许您将托管代码中的挂钩安装到非托管函数中。

SlimDX也被使用 – 这是一个围绕Direct3D库的开源托管包装器。

钩子的棘手部分是确定COM对象的虚函数的地址。 这是在上面的示例中使用小型C ++帮助程序DLL完成的,该DLL从VTable中查找地址。 [更新:发布了一条评论,显示如何从C#中获取VTable中的函数指针 – 给出了com对象的IntPtr]

该示例挂钩了IDirect3DDevice9的EndScene方法,这也是您想要绘制任何叠加层的地方。 至于在叠加层中显示一个表单我不太确定会如此简单 – 我的意思是你可以很容易地渲染图像,但你必须捕获输入并手动响应/传递事件到表单中问题恰当。 祝好运!

由于您没有C#的直接DirectX Access,这可能很棘手。

从我对这个概念的有限理解:

DirectX Hooks包含附加到DirectX Context并对其进行操作,这可能/可能不需要弄乱其他程序的内存,这些内容最适合C / C ++

我可能错了,但这是一个高级主题,我的直觉告诉我你可能在.NET下有问题