Rilevamento di applicazioni Direct3D a schermo intero
-
10-07-2019 - |
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.
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.