gpt4 book ai didi

c++ - 获取 Direct3D9 设备的窗口

转载 作者:行者123 更新时间:2023-11-30 04:26:46 25 4
gpt4 key购买 nike

我正在通过搜索 VTable 并将我自己的方法附加到选定的引用函数的开头来挂接 Direct3D9 设备。

D3DEndScene = (lpfnD3DEndScene)((LPVOID)dwVTable[VD3D_ENDSCENE]); // 35 dx8
D3DResetDevice = (lpfnD3DResetDevice)((LPVOID)dwVTable[VD3D_RESET]); // 14 dx8

DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());

DetourAttach(&(PVOID&)D3DEndScene, D3DEndScene_Hook);
DetourAttach(&(PVOID&)D3DResetDevice, D3DResetDevice_Hook);

DetourTransactionCommit();

一切正常。

因此,我可以访问我称为“pDevice”的 Direct3D9 设备。

HRESULT WINAPI D3DEndScene_Hook (LPDIRECT3DDEVICE9 pDevice)

我想提取 pDevice 使用的窗口句柄,以便我可以 Hook WndProc 属性并过滤掉键盘/鼠标事件(并自己处理它们)。我知道我可以使用 SetWindowLong 找到现有的 WndProc,但我不知道如何从设备中实际获取任何形式的窗口句柄。

我所知道的是,在方法 IDirect3D9::CreateDevice 中有一个参数 hFocusWindow,这似乎是我正在寻找的;但我不知道如何在创建后访问它。

Hook CreateDevice 对我来说不是一个很好的选择,因为我不会在设备创建很久之后才 Hook ,因此我不会及时捕获该函数。

如何获取 D3D9 设备的窗口句柄?

最佳答案

这就是您正在寻找的 D3D9:

IDirect3DDevice9::GetCreationParameters

您可以使用它来获取用于创 build 备的创建参数,包括 hFocusWindow。

希望对您有所帮助。

关于c++ - 获取 Direct3D9 设备的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11338949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com