نماذج Windows: القبض على الشاشة عند تشغيل غير بيانيا (أي شاشة نشطة)

StackOverflow https://stackoverflow.com/questions/183118

  •  06-07-2019
  •  | 
  •  

سؤال

ولقد حصلت على التطبيق الذي هو الرسومات مكثفة جدا ومبنية على DirectX و نماذج Windows. كان لديه إطار الأتمتة وإعادة حولها بنيت نظام الاختبار الآلي. للأسف، عندما ركضت الاختبارات غير المراقب أثناء بناء ليلا، وعرض غير نشط أو قيدوا مع شاشة التوقف، وسياسات أمن تقنية المعلومات لدينا لا تسمح لنا لتعطيل ذلك.

وهكذا سؤالي: هل هناك طريقة للقيام "شاشة" القبض على أحد تطبيقات التي تعمل دون العرض؟ أود أن تأكد من أن بطاقة الرسومات تعمل بحيث بلدي خط أنابيب جعل هو نفسه، ولكن ينبغي إطار اختبار لا تحتاج إلى الرعاية عن حالة العرض.

وأي مساعدة عن تقديره بعنف!

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

المحلول

ومنذ كنت المذكورة تقديم خط أنابيب، لذلك أفترض أنك تستخدم Direct3d، إذا كان الأمر كذلك، يمكنك حفظ backbuffer الإطار. فعلت ذلك عندما كنت لا تزال تستخدم VB.Net + MDX

Dim tempSurface As Direct3D.Surface
tempSurface = device.GetBackBuffer(0, 0, Direct3D.BackBufferType.Mono)
Direct3D.SurfaceLoader.Save(tempFilename, Direct3D.ImageFileFormat.Png, tempSurface)

ويمكنك تحويلها بسهولة أن تفعل أي لغة برمجة لك الاختيار، فإنه يدعو أساسا API Direct3d ل. رغم ذلك، كنت بحاجة لتكوين لك المعلمات backbuffer والحاضر كما

' Need to use flip to enable screen capture
presentParams.SwapEffect = Direct3D.SwapEffect.Flip 
presentParams.PresentationInterval = Direct3D.PresentInterval.One

نصائح أخرى

وتثبيت VM وتشغيل التطبيق في ذلك. إذا كنت تقوم بتشغيل شاشة التوقف أشك في بطاقة الفيديو الخاص بك حتى تولد واجهة المستخدم الرسومية لتطبيق.

إذا أنا أفهم الصحيح، كل ما تريد القيام به هو اتخاذ الاستيلاء على الشاشة من تطبيق معين ولم تتأثر النتيجة عن طريق شاشة التوقف ربما يعمل؟ وبقدر ما أعرف، لمجرد القيام GetDIBits على HDC من النافذة الصحيح ينبغي أن تفعل خدعة ولا تبالي شاشة التوقف.

وقد تجد هذا الرمز إلى أن تكون بطيئة حقا، ولكن يمكنك الحصول على تسريع ضخمة عن طريق تعيين PresentParams.PresentFlag = PresentFlag.LockableBackBuffer

وأيضا، لا تحتاج إلى تعيين PresentInterval.One أو SwapEffect.Flip، فإنها يمكن أن تترك في. رد و.Discard repsectively.

و(لاحظ أن هذا تسريع لا تعمل إذا كنت تستخدم مولتيسامبلينغ، تأكد من أن PresentParams.Multisample = Multisample.None. إذا كان لديك بطاقة نفيديا لا يزال بإمكانك الحصول الحواف من خلال تحديد خيار في لوحة التحكم نفيديا لتجاوز إعداد التطبيق إلى ما تريد!)

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