Обнаружение полноэкранных приложений Direct3D - PullRequest
4 голосов
/ 02 августа 2009

Есть ли способ обнаружить - через API Direct3D - приложения Direct3D, работающие в полноэкранном режиме?

SHQueryUserNotificationState , который может указывать таких приложений, поддерживается только в Vista и более поздних версиях. Он также работает только при запущенной оболочке Explorer.

Ответы [ 2 ]

2 голосов
/ 03 августа 2013

Я нашел способ обнаружения полноэкранных приложений 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 для полноэкранных игр. Странно ...

0 голосов
/ 03 августа 2009

Попробуйте '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

режим отображения адаптера. Как в отличие от режима отображения устройство, которое может быть неактивным, если Устройство не имеет полноэкранного режима.

...