Como ajustar programaticamente as configurações de registro do Windows Screensaver
-
21-09-2019 - |
Pergunta
Estou trabalhando no código que deve iniciar o protetor de tela definido pelas preferências do usuário. (O código está em Java, mas será executado apenas no Windows.) Minha abordagem atual é definir o valor da tela Screensavetimeout no registro como 1; Em teoria, isso deve chutar o protetor de tela após um atraso de apenas um segundo.
Mas, na prática, não faz isso. Eu acabei os valores no painel HKEY_CURRENT_USER Control Desktop ScreensaveTimeout e HKEY_USERS.Default Control Painel Desktop ScreensaveTimeout sem resultados. Eu posso ver os valores alterados quando aceito o Regedit, mas o valor "aguarda" nas propriedades de exibição -> economia de tela não muda.
Um tópico de troca de especialistas indicou que eu deveria fazer isso para fazer as alterações efetivas imediatamente:
%SystemRoot%\System32\RUNDLL32.EXE user32.dll, UpdatePerUserSystemParameters
... mas isso não parecia fazer nada.
Algum conselho ou insights sobre o que estou fazendo de errado?
Solução
Para ativar o protetor de tela, você pode achar mais fácil executar o arquivo .scr com um parâmetro '/s', assim:
C:\WINDOWS\system32\ssstars.scr /s
Ou não posso dizer muito sobre como fazer isso do Java, mas se você puder chamar as funções no usuário32.dll, poderá controlar o economizador da tela como um usuário final. Aqui estão alguns links:
- http://www.codeproject.com/kb/cs/screensavercontrol.aspx
- http://www.codeproject.com/kb/miscctrl/turning-screen-saver.aspx
(Por fim, existe o método .NET, mas novamente não tenho idéia de como obter isso de Java: http://zayko.net/post/c-how-to-disable-windows-screensaver-programticaticamente.aspx)