Windows プラットフォームでユーザー スクリーンセーバー パラメータを設定および取得するには、次の 2 つの方法があるようです。
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"
しかし、同じことを行うように見える 2 つの競合する方法があるため、どの方法を使用することをお勧めしますか?
PS。次の理由により、方法 2 (またはレジストリに直接書き込む) を強くお勧めします。
A. SPI_GETSCREENSAVEACTIVE フラグのバグの説明を読むと、MS 自体がレジストリの使用を推奨していることがわかります。
B. SPI_SETSCREENSAVEACTIVEおよびSPI_SETSCREENSAVETIMEOUTフラグのドキュメントを読むと、「*マシンが省電力モードまたはシステム ロック状態に入った場合、ERROR_OPERATION_IN_PROGRESS 例外が発生します。*」という不思議な行があります。 Windows 8 のテスト インストールで実際に発生し始めました。これは最も馬鹿げたエラーです。それが何を意味するのかを解釈したり、回避策を実行したりするための適切な方法はまったくありません(レジストリに直接書き込むことを除く)。