Jus*_*ing 16
您可以尝试使用C#挂钩Direct3D 9 API.这利用EasyHook开源.NET程序集,允许您将托管代码中的挂钩安装到非托管函数中.
SlimDX也被使用 - 这是一个围绕Direct3D库的开源托管包装器.
钩子的棘手部分是确定COM对象的虚函数的地址.这是在上面的示例中使用一个小型C++帮助程序DLL完成的,该DLL从VTable中查找地址.[更新:有一条评论显示如何从C#中获取VTable的函数指针 - 给一个IntPtr到com对象]
该示例挂钩了IDirect3DDevice9的EndScene方法,这也是您想要绘制任何叠加层的地方.至于在叠加中显示一个表单,我不太确定会如此简单 - 我的意思是你可以很容易地渲染图像,但你必须捕获输入并手动响应/传递事件到表单中问题恰当.祝好运!
(披露:我为这家公司工作)
您可以尝试我们的Deviare API,它具有从C#挂钩COM对象的功能.它是一组可以从任何编程语言(支持COM)使用的COM对象.有一篇文章,其中包含如何捕获视频和添加叠加层的源代码:检测Direct3D应用程序以捕获视频并计算FPS
COM Spy Console和Direct Sound Capture是两个实现控制台以挂钩COM对象(如DirectX)的示例.
希望能帮助到你.