首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取Direct3D9设备的窗口

获取Direct3D9设备的窗口
EN

Stack Overflow用户
提问于 2012-07-05 14:36:24
回答 1查看 1.8K关注 0票数 1

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

代码语言:javascript
复制
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设备。

代码语言:javascript
复制
HRESULT WINAPI D3DEndScene_Hook (LPDIRECT3DDEVICE9 pDevice)

我想提取pDevice正在使用的窗口句柄,这样我就可以挂钩WndProc属性并过滤出键盘/鼠标事件(并自己处理它们)。我知道我可以使用SetWindowLong来查找现有的WndProc,但我不知道如何从设备中实际获得任何形式的窗口句柄。

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

挂接CreateDevice对我来说不是一个很好的选择,因为直到设备创建后很久我才会挂接,因此我不会及时捕捉到这个函数。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-05 22:15:24

这就是你要找的D3D9:

IDirect3DDevice9::GetCreationParameters

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

希望这能有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11338949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档