スクリーンセーバーの種類を取得するには以下のとおり.
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) {
//スクリーンセーバーは動作しているがアクセスが拒否された
}
}
参照