2009-09-02 77 views
0

我正在处理应该启动由用户首选项定义的屏幕保护程序的代码。 (代码是用Java编写的,但只能在Windows下运行。)我目前的方法是将注册表中的ScreenSaveTimeOut值设置为1;在理论上,这应该在延迟一秒钟后启动屏幕保护程序。如何以编程方式调整Windows屏幕保护程序注册表设置

但实际上,它没有这样的事情。我已经在HKEY_CURRENT_USER \ Control Panel \ Desktop \ ScreenSaveTimeOut和HKEY_USERS.DEFAULT \ Control Panel \ Desktop \ ScreenSaveTimeOut中找到了值,但没有任何结果。当启动注册表编辑器时,我可以看到这些值发生了变化,但显示属性 - >屏幕保护程序中的“等待”值不会改变。

的专家交换线指示我应该这样做是为了使更改立即生效:

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

...但是,这似乎并没有做任何事情。

任何意见或见解我做错了什么?

回答

3

要启动屏幕保护程序,你可能会发现它更容易只是以“/ s”的参数执行.SCR文件,像这样:

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

或者说,我不能说太多有关如何来自Java的这样做,但如果你可以调用user32.dll中的函数,你可以像最终用户一样控制屏幕保护程序。这里有几个环节:

(最后,还有的.NET方法,但同样我不知道如何获取从Java:http://zayko.net/post/C-How-To-Disable-Windows-Screensaver-programmatically.aspx

+0

我正在建议这个同样的事情。任何你需要改变注册表设置的原因,Blair? – JasCav 2009-09-02 20:10:40

+0

+1为猜测我的计划B. :-)贾森,我不需要,我只是在寻求最优雅的解决方案。如果我采用这种方法,我还必须编写一些模拟鼠标移动代码,以防止屏幕保护程序在我不需要时运行。这是相当可行的,只是我喜欢的黑客而已。玩ScreenSaveTimeOut(可能ScreenSaveActive - 可能不知道我需要,因为我认为设置ScreenSaveTimeOut = 0会禁用屏幕保护程序)让我感觉移动部件更少。 – BlairHippo 2009-09-02 20:31:57

+0

从来没有真正弄清楚这一点,所以我和Plan B一起去了May,并且为它做了一个复选标记。 :-) – BlairHippo 2010-06-09 16:49:36

相关问题