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...