有没有办法通过Direct3D API检测 - 以全屏模式运行的Direct3D应用程序?
SHQueryUserNotificationState,indicate此类应用程序,仅在Vista及更高版本上受支持。它也仅在Explorer shell运行时有效。
答案 0 :(得分:2)
我找到了如何检测全屏Direct3D和OpenGL(例如Minecraft)应用程序。
致电IDirectDraw7::TestCooperativeLevel()。如果活动的全屏Direct3D应用程序正在运行或用户会话未激活(Win + L,Alt + Ctrl + Del,快速用户切换等),此函数将返回DDERR_EXCLUSIVEMODEALREADYSET
。
注意:使用DirectDrawCreateEx
致电DDCREATE_EMULATIONONLY
。这大大减少了IDirectDraw7的资源使用。
我仅在Windows 7 SP1 x64中使用1个显示器测试了此方法。
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
适配器的显示模式。如 反对的显示模式 设备,如果是,则可能无效 设备没有全屏模式。