Я нашел способ обнаружения полноэкранных приложений Direct3D и OpenGL (например, Minecraft).
Вызов IDirectDraw7 :: TestCooperativeLevel () . Эта функция возвращает DDERR_EXCLUSIVEMODEALREADYSET
, если активно полноэкранное приложение Direct3D или если пользовательский сеанс не активен (Win + L, Alt + Ctrl + Del, быстрое переключение пользователей и т. Д.).
Примечание: Звоните DirectDrawCreateEx
с DDCREATE_EMULATIONONLY
. Это значительно уменьшает использование ресурсов IDirectDraw7.
Я тестировал этот метод только в Windows 7 SP1 x64 с 1 дисплеем.
BTW SHQueryUserNotificationState()
возвращает QUNS_BUSY
вместо QUNS_RUNNING_D3D_FULL_SCREEN
для полноэкранных игр. Странно ...