防止' d3d9.dll'功能' D3D9SetMode'调用' ChangeDisplaySettingsExA'

时间:2014-08-06 17:53:30

标签: c++ directx message-pump

我正在使用第三方.dll包装DirectX d3d9.dll,修改原始.dll的执行。 Fraps使用了这种类型设置的一个众所周知的例子。

我正在多头模式下创建一个全屏独占设备(D3DCREATE_ADAPTERGROUP_DEVICE)。

我遇到的问题是.dll包装器在从D3D9SetMode调用特定函数时退出程序。

这是WinDbg在调用ChangeDisplaySettingsExA函数时产生的部分调用堆栈:

0018e748 7024712d USER32!ChangeDisplaySettingsExA
0018e828 7024702e d3d9!D3D9SetMode+0xec
0018e858 70246fab d3d9!DdSetModeLH+0x83
0018e954 7024760b d3d9!CSwapChain::SetSwapChainDisplayMode+0x5ca
0018e9a4 702492b0 d3d9!CSwapChain::DoneExclusiveMode+0xc7
0018e9c8 702491fc d3d9!CEnum::DoneExclusiveMode+0x5d
0018ea18 7024904a d3d9!handleActivateApp+0x12f
0018ea40 763862fa d3d9!WindowProc+0x30f
...

我已经解决了WM_ACTIVATE是在此之前要处理的最后一条消息。

我尝试构建针对DirectX9 2005年2月和2007年SDK(分别为d3dx9_24.dlld3dx9_32.dll) - 它们都有相同的问题。

我怀疑有一个标记或设置方案可以阻止对ChangeDisplaySettingsExA的调用。我在设备创建上尝试D3DCREATE_NOWINDOWCHANGES但没有成功。

任何链接,信息,想法?

0 个答案:

没有答案