Detecting full-screen Direct3D applications

后端 未结 2 688
不思量自难忘°
不思量自难忘° 2021-02-10 14:04

Is there any way to detect - through the Direct3D API - Direct3D applications running in full-screen mode?

SHQueryUserNotificationState, which can indicate such applicat

相关标签:
2条回答
  • 2021-02-10 14:55

    I found how to detect full-screen Direct3D and OpenGL (for example Minecraft) applications.

    Call IDirectDraw7::TestCooperativeLevel(). This function returns DDERR_EXCLUSIVEMODEALREADYSET if active full-screen Direct3D application is running or if user session is not active (Win+L, Alt+Ctrl+Del, Fast User Switching, etc).

    Note: Call DirectDrawCreateEx with DDCREATE_EMULATIONONLY. This dramatically reduces resources usage by IDirectDraw7.

    I have tested this method only in Windows 7 SP1 x64 with 1 display.


    BTW SHQueryUserNotificationState() returns QUNS_BUSY instead of QUNS_RUNNING_D3D_FULL_SCREEN for full-screen games. Strange...

    0 讨论(0)
  • 2021-02-10 14:55

    Try 'IDirect3DDevice9::GetDisplayMode':

    http://msdn.microsoft.com/en-us/library/bb174387%28VS.85%29.aspx

    HRESULT GetDisplayMode(
      UINT  iSwapChain,
      D3DDISPLAYMODE * pMode
    );
    

    Parameters:

    iSwapChain[in]

    An unsigned integer specifying the swap chain. 
    

    pMode[out]

    Pointer to a D3DDISPLAYMODE structure containing data about the
    

    display mode of the adapter. As opposed to the display mode of the device, which may not be active if the device does not own full-screen mode.

    0 讨论(0)
提交回复
热议问题