windows - 屏幕锁定期间 D3D 设备故障

标签 windows winapi directx device

我有一个由 Direct3D9::CreateDevice() 失败引起的问题。在Windows 7锁屏状态下执行以下代码会失败。由于需求,我需要能够在锁屏状态下创建一个设备。

当使用以下参数调用 CreateDevice 时,出现 D3DERR_INVALIDCALL 错误。我对正在使用的 HWND 进行了广泛的试验,并仔细检查了它是否有效。我还尝试了对演示参数进行各种调整,但无济于事。有没有人以前遇到过这个问题,或者对可能导致无效调用返回的原因有更好的了解?

同样,此失败仅在锁定屏幕时发生,当在任何其他测试状态下运行时,它会成功。

D3DPRESENT_PARAMETERS pp;
ZeroMemory( &pp, sizeof(D3DPRESENT_PARAMETERS) );
pp.BackBufferFormat = D3DFMT_UNKNOWN;
pp.SwapEffect       = D3DSWAPEFFECT_DISCARD;
pp.Windowed         = TRUE;

HWND focusWndHnd = GetConsoleWindow();

if ( focusWndHnd == NULL && pp.hDeviceWindow == NULL )
{
   focusWndHnd = ::GetDesktopWindow();
}


IDirect3DDevice9* pd3dDevice;

IDirect3D9* pD3D = Direct3DCreate9( D3D_SDK_VERSION );

hr = pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_NULLREF, focusWndHnd,
             D3DCREATE_SOFTWARE_VERTEXPROCESSING|D3DCREATE_FPU_PRESERVE, &pp, &pd3dDevice );

最佳答案

旧版 Direct3D 9 界面将“安全桌面”视为丢失设备的情况。使用支持 WDDM 的 Direct3D 版本(Direct3D9Ex、Direct3D 10.x 或 Direct3D 11.x)将避免此问题。

关于windows - 屏幕锁定期间 D3D 设备故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8859560/

相关文章:

c# - Windows 中的蓝牙 AVRCP 命令会触发哪些事件

windows - 从 Windows 命令提示符复制到剪贴板的简单方法

c++ - Windows API 函数 CredUIPromptForWindowsCredentials 也返回错误 31

c++ - 为什么在 win32 中有不同的 TEXT like macros for same thing?

c# - 渲染时纹理显示为灰色

c++ - 结合 C++ 和 C

windows - 移动 pgdata 目录后,Postgres 服务将无法在 Windows 中启动

c# - 缩略图 shell 扩展 .NET

windows - lua的字符串模式匹配为什么要这样做呢?

image-processing - 外发光作为 HLSL 着色器