我已经尝试过的解决方案是:
1)将ini键添加到$ WINDIR \ system.ini
[boot]
SCRNSAVE.EXE $SYSDIR\savername.scr
2)调用user32.dll :: SystemParametersInfo(17,1,0,2)
上述内容适用于XP但不适用于2000
rundll32.exe desk.cpl,InstallScreenSaver <path to screensaver>
这种方法在2000年有效,但它会弹出一个配置对话框,然后当我回到对话框时,设置就消失了。
寻找适用于所有平台的解决方案或一组解决方案,不会弹出配置屏幕,在您打开配置对话框时保留设置,并且不需要第三方软件。
答案 0 :(得分:0)
结合INI方法和此处的注册表方法:How do I change the screensaver programatically?。这是NSIS代码:
!include WinVer.nsh
; Install the executable
${If} ${AtMostWinXP}
SetOutPath "$SYSDIR"
File screen.scr
${EndIf}
SetOutPath "$INSTDIR"
File screen.scr
; Set screensaver and make it active
${If} ${AtMostWinXP}
WriteINIStr "$WINDIR\system.ini" "boot" "SCRNSAVE.EXE" "$SYSDIR\screen.scr"
${Else}
WriteRegStr HKCU "Control Panel\desktop" "SCRNSAVE.EXE" "$INSTDIR\screen.scr"
WriteRegStr HKCU "Control Panel\desktop" "ScreenSaveActive" "1"
${EndIf}
; Notify system of the change
System::Call 'user32.dll::SystemParametersInfo(17, 1, 0, 2)'
请注意,我在\ windows \ system32和软件包安装目录中都安装了屏幕保护程序。出于某种原因,在system32中安装在Windows 2000中不起作用。