1

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 のテスト インストールで実際に発生し始めました。これは最も馬鹿げたエラーです。それが何を意味するのかを解釈したり、回避策を実行したりするための適切な方法はまったくありません(レジストリに直接書き込むことを除く)。

4

3 に答える 3