كيفية تعديل إعدادات سجل Windows Screensaver بشكل برمجي
-
21-09-2019 - |
سؤال
أنا أعمل على الرمز الذي من المفترض أن يبدأ شاشة الشاشة المحددة بواسطة تفضيلات المستخدم. (الكود موجود في Java ، ولكن سيتم تشغيله فقط تحت Windows.) نهجاتي الحالية هو تعيين قيمة ScreenSaVeTimeout في السجل إلى 1 ؛ من الناحية النظرية ، يجب أن يركل هذا الشاشة بعد تأخير ثانية واحدة فقط.
ولكن في الممارسة العملية ، لا شيء من هذا القبيل. لقد ضربت القيم في كل من Hey_Current_User Control Panel Desktop ScreenSavetimeout و Hkey_users.default Control Panel Desktop ScreenSavetimeout بدون نتائج. أستطيع أن أرى القيم تتغير عندما أقوم بإطلاق النار على Regedit ، لكن قيمة "الانتظار" في خصائص العرض -> لا تتغير توفير الشاشة.
أشار خيط تبادل الخبراء إلى أنه يجب علي القيام بذلك لجعل التغييرات فعالة على الفور:
%SystemRoot%\System32\RUNDLL32.EXE user32.dll, UpdatePerUserSystemParameters
... لكن هذا لا يبدو أنه يفعل أي شيء.
أي نصيحة أو رؤى حول ما أفعله خطأ؟
المحلول
لتفعيل توفير الشاشة ، قد تجد أنه من الأسهل فقط تنفيذ ملف .scr باستخدام معلمة "/s" ، مثل ذلك:
C:\WINDOWS\system32\ssstars.scr /s
أو لا يمكنني أن أقول الكثير عن كيفية القيام بذلك من Java ، ولكن إذا كان يمكنك الاتصال بالوظائف في user32.dll ، يمكنك التحكم في توفير الشاشة مثل المستخدم النهائي. فيما يلي روابط زوجين:
- http://www.codeproject.com/kb/cs/screensavercontrol.aspx
- http://www.codeproject.com/kb/miscctrl/turning-screen-saver.aspx
(أخيرًا ، هناك طريقة .NET ، لكن مرة أخرى ليس لدي أي فكرة عن كيفية الحصول على ذلك من Java: http://zayko.net/post/c-how-to--disable-windows-screensaver-programmally.aspx)