在 Windows 平台上设置和获取用户屏保参数似乎有两种方法:
1:通过 SystemParametersInfo() API:
//To read
SystemParametersInfo(SPI_GETSCREENSAVEACTIVE, 0, &bScreensaverAcrtive, NULL);
SystemParametersInfo(SPI_GETSCREENSAVETIMEOUT, 0, &nScreensaverTimeout, NULL);
//No API to get the screensaver file used
//To set
SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 0, bScreensaverAcrtive, NULL);
SystemParametersInfo(SPI_SETSCREENSAVETIMEOUT, 0, nScreensaverTimeout, NULL);
//No API to change the screensaver file
2:通过系统注册表项:
HKCU\Control Panel\Desktop - "ScreenSaveActive"
HKCU\Control Panel\Desktop - "ScreenSaveTimeOut"
HKCU\Control Panel\Desktop - "SCRNSAVE.EXE"
但既然有两种竞争方法似乎做同样的事情,那么推荐的使用方法是什么?
PS。由于以下原因,我非常喜欢方法#2(或直接写入注册表):
A. 如果您阅读SPI_GETSCREENSAVEACTIVE 标志中的错误说明,您会看到 MS 自己建议使用注册表。
B. 如果您阅读SPI_SETSCREENSAVEACTIVE和SPI_SETSCREENSAVETIMEOUT标志的文档,有一条神秘的线说:“*如果机器进入省电模式或系统锁定状态,则会发生 ERROR_OPERATION_IN_PROGRESS 异常。*”我首先忽略了这种情况,直到它实际上开始发生在我的 Windows 8 测试安装中。这是最愚蠢的错误,我应该告诉你。绝对没有优雅的方式来解释它的含义或做任何解决方法(除非直接写入注册表。)