Domanda

Esiste un modo per rilevare - tramite l'API Direct3D - le applicazioni Direct3D in esecuzione in modalità a schermo intero?

SHQueryUserNotificationState , che può < a href = "http://msdn.microsoft.com/en-us/library/bb762533%28VS.85%29.aspx" rel = "nofollow noreferrer"> indica tali applicazioni è supportato solo su Vista e su. Funziona anche solo quando la shell Explorer è in esecuzione.

È stato utile?

Soluzione

Ho scoperto come rilevare le applicazioni Direct3D e OpenGL a schermo intero (ad esempio Minecraft).

Chiama IDirectDraw7 :: TestCooperativeLevel () . Questa funzione restituisce DDERR_EXCLUSIVEMODEALREADYSET se l'applicazione Direct3D a schermo intero attiva è in esecuzione o se la sessione utente non è attiva (Win + L, Alt + Ctrl + Canc, Cambio rapido utente, ecc.)

Nota: chiama DirectDrawCreateEx con DDCREATE_EMULATIONONLY . Ciò riduce drasticamente l'utilizzo delle risorse da parte di IDirectDraw7.

Ho testato questo metodo solo in Windows 7 SP1 x64 con 1 display.


BTW SHQueryUserNotificationState () restituisce QUNS_BUSY anziché QUNS_RUNNING_D3D_FULL_SCREEN per i giochi a schermo intero. Strano ...

Altri suggerimenti

Prova "IDirect3DDevice9 :: GetDisplayMode":

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

HRESULT GetDisplayMode(
  UINT  iSwapChain,
  D3DDISPLAYMODE * pMode
);
  

Parametri:

     

iSwapChain [in]

An unsigned integer specifying the swap chain. 
  

pMode [out]

Pointer to a D3DDISPLAYMODE structure containing data about the
  

modalità di visualizzazione dell'adattatore. Come   al contrario della modalità di visualizzazione di   dispositivo, che potrebbe non essere attivo se il   il dispositivo non possiede la modalità a schermo intero.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top