【问题标题】:Detours capture texture弯路捕捉纹理
【发布时间】: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


【解决方案1】:

Detour 拦截 OS API 调用,Direct3D 是通过 COM 对象概念实现的。您可能可以拦截 D3D 设备对象创建的第一步,但在此之后您将不得不处理 COM 对象接口,而 Detour 将无济于事。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 2017-07-15
    • 1970-01-01
    • 2014-04-25
    • 2017-11-26
    相关资源
    最近更新 更多