【发布时间】:2012-05-12 23:55:09
【问题描述】:
有一个赛车游戏,我需要收集遥测和统计数据。并添加一个额外的 HUD
我编译了 Detours。并且可以使钩子改变应用程序窗口的名称。Like:
LRESULT (WINAPI * TrueSendMessageW)(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) = SendMessageW;
__declspec(dllexport) LRESULT WINAPI MySendMessageW(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
if (Msg == WM_SETTEXT)
return TrueSendMessageW(hWnd, Msg, wParam, (LPARAM)L"new name window");
return TrueSendMessageW(hWnd, Msg, wParam, lParam);
}
...
并使用 withdll.exe 运行它。没事。
但我不知道如何拦截 direct3d。在API监视器的帮助下,我发现程序使用了Microsoft.Xna.Framework.Graphics.dll IDirect3DDevice9::SetTexture
有人能告诉我如何获得这种纹理吗?一般来说,我想得到类似link
【问题讨论】:
-
所以您已经绕道了 SendMessage,但您真正需要的是绕道 Direct3D API 流。有趣的是,您提出了 Matthew Fischer 的链接,因为我实际上是在尝试在托管 C# 中重新创建该项目。我无法帮助您使用 C++,但一定要下载 Fischer 的源代码。您会注意到他没有使用 Detours 来拦截 Diret3D。他只是简单地将他的自己的 d3d9.dll (阅读为什么它工作)。他必须为他的包装器重新创建大部分接口,但它可以工作。
标签: c++ hook direct3d detours apimonitor