检测全屏Direct3D应用程序

时间:2009-08-02 18:18:46

标签: directx fullscreen direct3d

有没有办法通过Direct3D API检测 - 以全屏模式运行的Direct3D应用程序?

SHQueryUserNotificationStateindicate此类应用程序,仅在Vista及更高版本上受支持。它也仅在Explorer shell运行时有效。

2 个答案:

答案 0 :(得分:2)

我找到了如何检测全屏Direct3D和OpenGL(例如Minecraft)应用程序。

致电IDirectDraw7::TestCooperativeLevel()。如果活动的全屏Direct3D应用程序正在运行或用户会话未激活(Win + L,Alt + Ctrl + Del,快速用户切换等),此函数将返回DDERR_EXCLUSIVEMODEALREADYSET

注意:使用DirectDrawCreateEx致电DDCREATE_EMULATIONONLY。这大大减少了IDirectDraw7的资源使用。

我仅在Windows 7 SP1 x64中使用1个显示器测试了此方法。


对于全屏游戏,BTW SHQueryUserNotificationState()会返回QUNS_BUSY而不是QUNS_RUNNING_D3D_FULL_SCREEN。奇怪...

答案 1 :(得分:0)

尝试'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
  

适配器的显示模式。如   反对的显示模式   设备,如果是,则可能无效   设备没有全屏模式。