2009-09-02 7 views
0

Je travaille sur du code qui est supposé démarrer l'économiseur d'écran défini par les préférences de l'utilisateur. (Le code est en Java, mais ne sera exécuté que sous Windows.) Mon approche actuelle consiste à définir la valeur ScreenSaveTimeOut dans le registre à 1; en théorie, cela devrait lancer l'économiseur d'écran après un délai d'une seconde seulement.Comment faire pour modifier par programmation les paramètres du registre de l'économiseur d'écran Windows

Mais en pratique, cela ne fonctionne pas. J'ai frappé les valeurs dans HKEY_CURRENT_USER \ Panneau de configuration \ Desktop \ ScreenSaveTimeOut et HKEY_USERS.DEFAULT \ Control Panel \ Desktop \ ScreenSaveTimeOut sans aucun résultat. Je peux voir les valeurs changer lorsque je lance regedit, mais la valeur "Attendre" dans Propriétés d'affichage -> économiseur d'écran ne change pas.

Un fil Experts-échange indiqué que je dois faire cela pour appliquer les changements immédiatement:

%SystemRoot%\System32\RUNDLL32.EXE user32.dll, UpdatePerUserSystemParameters

... mais cela ne semble pas faire quoi que ce soit.

Un conseil ou un aperçu de ce que je fais mal?

Répondre

3

Pour activer l'économiseur d'écran, vous trouverez peut-être plus aisé d'exécuter le fichier .scr avec un paramètre '/ s de, comme ceci:

C:\WINDOWS\system32\ssstars.scr /s 

Ou, je ne peux pas dire grand-chose sur la façon dont pour faire cela à partir de Java, mais si vous pouvez appeler les fonctions dans user32.dll, vous pouvez contrôler l'économiseur d'écran comme un utilisateur final. Voici quelques liens:

(Enfin, il y a la méthode .NET, mais encore une fois je ne sais pas comment obtenir ce à partir de Java: http://zayko.net/post/C-How-To-Disable-Windows-Screensaver-programmatically.aspx)

+0

J'allais suggérer la même chose. Une raison pour laquelle vous devez changer les paramètres du registre, Blair? – JasCav

+0

+1 pour deviner mon plan B. :-) Jason, je n'ai pas besoin de, je suis juste en train de chercher la solution la plus élégante. Si je vais avec cette approche, je devrai aussi coder un mouvement de souris simulé pour empêcher l'écran d'être activé quand je ne le veux pas. Ce qui est tout à fait faisable, juste un peu hack-y à mon goût. Jouer avec ScreenSaveTimeOut (et peut-être ScreenSaveActive - je ne sais pas ce dont j'ai besoin, puisque je pense que la définition de ScreenSaveTimeOut = 0 désactive l'économiseur d'écran) m'a semblé avoir moins de parties mobiles. – BlairHippo

+0

Je n'ai jamais vraiment compris, je suis donc parti avec Plan B. May et lui ai aussi remis une coche. :-) – BlairHippo

Questions connexes