سؤال

هل هناك أي طريقة للكشف - من خلال API Direct3D - تطبيقات Direct3D تشغيل في وضع ملء الشاشة

SHQueryUserNotificationState ، والتي يمكن < يتم اعتماد أ href = "http://msdn.microsoft.com/en-us/library/bb762533٪28VS.85٪29.aspx" يختلط = "نوفولو noreferrer"> تشير مثل هذه التطبيقات، فقط على ويندوز فيستا و اعلى. كما أنها تعمل فقط عندما يتم تشغيل مستكشف قذيفة.

هل كانت مفيدة؟

المحلول

ولقد وجدت طريقة للكشف عن كامل الشاشة Direct3D و برنامج OpenGL (على سبيل المثال ماين كرافت) التطبيقات.

IDirectDraw7 :: TestCooperativeLevel () . هذه الدالة تقوم بإرجاع DDERR_EXCLUSIVEMODEALREADYSET إذا كان التطبيق نشطة ملء الشاشة Direct3D قيد التشغيل أو إذا جلسة عمل المستخدم غير نشطة (وين + L، مفاتيح Alt + Ctrl + ديل، التبديل السريع بين المستخدمين، الخ).

ملحوظة: دعوة DirectDrawCreateEx مع DDCREATE_EMULATIONONLY. هذا يقلل بشكل كبير من استخدام الموارد التي IDirectDraw7.

ولقد اختبرت هذه الطريقة فقط في ويندوز 7 SP1 إلى x64 مع 1 العرض.


وراجع للشغل SHQueryUserNotificationState() عوائد QUNS_BUSY بدلا من QUNS_RUNNING_D3D_FULL_SCREEN للألعاب ملء الشاشة. غريب ...

نصائح أخرى

وحاول "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
<اقتباس فقرة>   

ووضع العرض لمحول. مثل   بدلا من وضع العرض لل   الجهاز، والتي قد لا تكون نشطة إذا كان   الجهاز لا تملك وضع ملء الشاشة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top