我通过搜索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正在使用的窗口句柄,这样我就可以挂钩WndProc属性并过滤出键盘/鼠标事件(并自己处理它们)。我知道我可以使用SetWindowLong来查找现有的WndProc,但我不知道如何从设备中实际获得任何形式的窗口句柄。
我所知道的是,在IDirect3D9::CreateDevice方法中有一个参数hFocusWindow,这似乎就是我要找的;但是我不知道如何在创建之后访问它。
挂接CreateDevice对我来说不是一个很好的选择,因为直到设备创建后很久我才会挂接,因此我不会及时捕捉到这个函数。
如何获取D3D9设备的窗口句柄?
发布于 2012-07-05 22:15:24
这就是你要找的D3D9:
IDirect3DDevice9::GetCreationParameters
您可以使用它来获取用于创建设备的创建参数,包括hFocusWindow。
希望这能有所帮助。
https://stackoverflow.com/questions/11338949
复制相似问题