谁能告诉我如何在 C# 中挂接/覆盖 DirectX 游戏?
我曾尝试让全屏 C# 窗口与游戏重叠,但它不会。 经过一番研究,我发现我需要 Hook 游戏,然后显示 C# 窗口。
谁能解释一下我将如何做到这一点? 我可以在 DirectX 游戏上显示 C# 表单吗?
最佳答案
你可以试试my example on hooking the Direct3D 9 API using C# .这利用了 EasyHook 一个开源 .NET 程序集,允许您将 Hook 从托管代码安装到非托管函数中。
还使用了 SlimDX - 这是一个围绕 Direct3D 库的开源托管包装器。
Hook 的棘手部分是确定 COM 对象的虚函数的地址。这是在上面的示例中使用从 VTable 中查找地址的小型 C++ 帮助程序 DLL 完成的。 [更新:有一条评论显示了如何在 C# 中从 VTable 获取函数指针——给 com 对象一个 IntPtr]
该示例 Hook 了 IDirect3DDevice9 的 EndScene 方法,这也是您想要绘制任何叠加层的地方。至于在叠加层中显示表单,我不太确定会这么容易——我的意思是你可以很容易地渲染图像,但你必须捕获输入并手动响应/将事件传递给表单适当提问。祝你好运!
关于c# - Hook /覆盖 DirectX 游戏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2649702/