【发布时间】:2010-11-16 05:00:23
【问题描述】:
有什么方法可以通过 Direct3D API 检测以全屏模式运行的 Direct3D 应用程序吗?
SHQueryUserNotificationState,可以indicate这样的应用程序,只支持Vista及以上。它也仅在 Explorer shell 运行时才有效。
【问题讨论】:
标签: directx fullscreen direct3d
有什么方法可以通过 Direct3D API 检测以全屏模式运行的 Direct3D 应用程序吗?
SHQueryUserNotificationState,可以indicate这样的应用程序,只支持Vista及以上。它也仅在 Explorer shell 运行时才有效。
【问题讨论】:
标签: directx fullscreen direct3d
我发现了如何检测全屏 Direct3D 和 OpenGL(例如 Minecraft)应用程序。
致电IDirectDraw7::TestCooperativeLevel()。如果活动的全屏 Direct3D 应用程序正在运行或用户会话未活动(Win+L、Alt+Ctrl+Del、快速用户切换等),则此函数返回 DDERR_EXCLUSIVEMODEALREADYSET。
注意:使用DDCREATE_EMULATIONONLY 致电DirectDrawCreateEx。这大大减少了 IDirectDraw7 的资源使用量。
我仅在带有 1 个显示器的 Windows 7 SP1 x64 中测试了此方法。
顺便说一句,SHQueryUserNotificationState() 返回QUNS_BUSY 而不是QUNS_RUNNING_D3D_FULL_SCREEN 用于全屏游戏。奇怪……
【讨论】:
尝试“IDirect3DDevice9::GetDisplayMode”:
http://msdn.microsoft.com/en-us/library/bb174387%28VS.85%29.aspx
HRESULT GetDisplayMode(
UINT iSwapChain,
D3DDISPLAYMODE * pMode
);
参数:
iSwapChain[in]
An unsigned integer specifying the swap chain.
pMode[out]
Pointer to a D3DDISPLAYMODE structure containing data about the
适配器的显示模式。作为 与显示模式相反 设备,如果 设备没有全屏模式。
【讨论】: