سؤال

لدينا عملية ليلا تقوم بتحديث التطبيقات على جهاز كمبيوتر المستخدم، وهذا يتطلب جلب التطبيق لأسفل والنسخ الاحتياطي مرة أخرى (لا تتطلع إلى الدخول في هذه العملية).

المشكلة هي أننا نقوم ببناء APPBAR Windows على الإطلاق الذي يتطلب شاشة سارية، وعندما يتم قفل النظام، ليس هناك واحد في فئة الشاشة. لذلك لا يتم تمكين أي من المؤثرات المرئية ويظهر قبيح حقيقي.

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

أيه أفكار؟؟ لا أستطيع أن أجد معلومات العرض في أي مكان، ولكن يجب تخزينها في مكان ما، حيث لا يزال المستخدم مسجلا.

محتويات الشاشة.جميع مجموعة الكثافة:

** عند مغلق:

Device Name    : DISPLAY
Primary        : True
Bits Per Pixel : 0
Bounds         : {X=-1280,Y=0,Width=2560,Height=1024}
Working Area   : {X=0,Y=0,Width=1280,Height=1024}

** عند إلغاء القفل:

Device Name    : \\.\DISPLAY1
Primary        : True
Bits Per Pixel : 32
Bounds         : {X=0,Y=0,Width=1280,Height=1024}
Working Area   : {X=0,Y=0,Width=1280,Height=994}

Device Name    : \\.\DISPLAY2
Primary        : False
Bits Per Pixel : 32
Bounds         : {X=-1280,Y=0,Width=1280,Height=1024}
Working Area   : {X=-1280,Y=0,Width=1280,Height=964}
هل كانت مفيدة؟

المحلول

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

نصائح أخرى

تعتمد مشكلة قفل الشاشة هذه على الإصدار الذي تستخدمه، إما XP الذي يستخدم جينا يقوم بإغلاق الشاشة و Vista التي تستخدم Contentprovider، وكلاهما من هذه الآليات مسؤولة في النهاية عن هذا.

الطريقة الوحيدة لمعرفة ما إذا كانت الشاشة مؤمنة، هي شاشة توقف في شاشة التوقف، (يمكن الاستفسار بسهولة عن طريق تشغيل Pinvoke للاستعلام systemsparameterinfo., ، لمعرفة ما إذا كانت شاشة التوقف نشطة أم لا - spi_getscreensaverrunning. و spi_getscreensavesecure. لتحديد ما إذا كان ذلك سيؤدي ذلك إلى تشغيل مجتمع أو مزود محتوى) عند الضغط على Winkey + L للركل في شاشة التوقف، بعد الفترة الزمنية المحددة، إذا لم يكن أي نشاط أو Gina أو ContentRovider يركل ويستبدل شاشة التوقف بشاشة القفل. .. لقد قمت بتضمين روابطتين ذات صلة تم نشرها هنا حول معلومات التسجيل الآمنة تحت Windows ...

سيتطلب الأمر القليل من العمل، ومع ذلك، يمكنك استخدام EnumdisplayDevices، enumdisplaysetstingsex، مراقب FOMPINT، GETMONTRITITINFO كل من User32 واستضافر لقطة شاشة للجهاز.

إذا تم تأمين الكمبيوتر، أو إذا كانت هناك شاشة نشطة، فستكون القبض على الشاشة دائما لون بيج. يمكنك التحقق من هذا الشرط لمعرفة النظام مغلق. يعمل هذا على أنظمة يتم تخصيصها أيضا (عميل رفيعي إلى XP VDI على سبيل المثال.)

على الأقل يعمل في بيئتي. يمكن العثور على عينات التعليمات البرمجية بواسطة googling.

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