4

有没有办法通过 Direct3D API 检测以全屏模式运行的 Direct3D 应用程序?

SHQueryUserNotificationState可以指示此类应用程序,仅在 Vista 及更高版本上受支持。它也仅在 Explorer shell 运行时才有效。

4

2 回答 2

2

我发现了如何检测全屏 Direct3D 和 OpenGL(例如 Minecraft)应用程序。

调用IDirectDraw7::TestCooperativeLevel()DDERR_EXCLUSIVEMODEALREADYSET如果活动的全屏 Direct3D 应用程序正在运行或用户会话未活动(Win+L、Alt+Ctrl+Del、快速用户切换等),则此函数返回。

注意:DirectDrawCreateEx用调用DDCREATE_EMULATIONONLY。这大大减少了 IDirectDraw7 的资源使用量。

我仅在带有 1 个显示器的 Windows 7 SP1 x64 中测试了此方法。


BTWSHQueryUserNotificationState()返回QUNS_BUSY而不是QUNS_RUNNING_D3D_FULL_SCREEN全屏游戏。奇怪的...

于 2013-08-03T19:23:04.720 回答
0

尝试“IDirect3DDevice9::GetDisplayMode”:

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

HRESULT GetDisplayMode(
  UINT  iSwapChain,
  D3DDISPLAYMODE * pMode
);

参数:

iSwapChain[输入]

An unsigned integer specifying the swap chain. 

pMode[输出]

Pointer to a D3DDISPLAYMODE structure containing data about the

适配器的显示模式。与设备的显示模式相反,如果设备不拥有全屏模式,则可能不会处于活动状态。

于 2009-08-03T12:45:21.147 回答