Last Updated 2002/01/16
Programming Tips Windows スクリーンセーバー  索 引 
スクリーンセーバーの有無(種類)
2002/01/16

スクリーンセーバーの種類を取得するには以下のとおり.

Windows95系
system.iniの[boot]セクションに
SCREENSAVE.EXE=ファイル名
とある.
スクリーンセーバーが指定されてない場合はこの行が存在しない.

WindowsNT系
HKEY_CURRENT_USER\Control Panel\Desktop\SCREENSAVE.EXE
に指定がある.
スクリーンセーバーが指定されてない場合はこのキーが存在しない.

スクリーンセーバーが設定してあるか否かだけを判断するのは以下で可能.
if(SystemParametersInfo(SPI_GETSCREENSAVEACTIVE, 0, &nActive, SPIF_UPDATEINIFILE) == TRUE) {
    if(nActive) {
    //スクリーンセイバーが設定されている
    }
}

2002/09/26 追記

Windows2000 ではいつも nActive が TRUE となるらしい.(情報ありがとうございます)



スクリーンセーバーが起動しているかどうかを調べるには以下のとおり.

// Windows95系
// この方法はウィンドウクラス名が違えば失敗に終わる
HWND hWnd = FindWindow("WindowsScreenSaverClass", NULL);
if (hWnd != NULL){
// 起動している
}

// WindowsNT系
HDESK hDesk;
hDesk = OpenDesktop(TEXT("screen-saver"), 0, FALSE,DESKTOP_READOBJECTS | DESKTOP_WRITEOBJECTS);
if(hDesk) {
// スクリーンセーバーが起動している
    EnumDesktopWindows(hDesk,StopScreenSaverProc,0);
    CloseDesktop(hDesk);
} else {
    DWORD dwErr = GetLastError();
    if(dwErr == ERROR_ACCESS_DENIED) {
    //スクリーンセーバーは動作しているがアクセスが拒否された
    }
}


参照
前後のTips
スクリーンセーバーの有無(種類)

DSS ProgrammingTipsCGI Ver2.02