Programming Windows Maniacs - プログラミング ウィンドウズ マニアックス ■ ご利用に際して ■ 更新履歴 ■ お問い合わせ ■ このホームページについて  
ホーム >> システム >> スクリーンセーバーが開始されないようにするには

スクリーンセーバーが開始されないようにするには

  ある特定のアプリケーションが起動しているとき、スクリーンセーバーが動いていると困ることがあります。
  たとえば、CDRライティング中にスクリーンセーバーが動いて負荷が高くなるとライティングに失敗することがあります。
  このようなときに一時的にスクリーンセーバーが動作しないようにアプリケーションから制御できると便利です。

  スクリーンセーバーが開始されないようにする SystemParametersInfo () APISPI_SETSCREENSAVEACTIVE を指定することによりできます。
  SystemParametersInfo () API第2引数にTRUEを設定すると開始されるようになります。逆にFALSEを設定すると開始されないようになります。

  下記は、ONボタンを押すとスクリーンセーバーが開始される状態になり、OFFボタンを押すとスクリーンセーバーが開始されない状態になります。
  画面のプロパティでスクリーンセーバーが1分後に起動するように設定した上でサンプルを動作させて1分放置してみてください。

 

■■■ scrnsvrop プロジェクト
■ main.cpp
#include <windows.h>
#include <tchar.h>

#include "resource.h"


BOOL CALLBACK DialogFunc ( HWND hWnd,
    UINT nMessage,
    WPARAM wParam,
    LPARAM lParam )
{
    switch ( nMessage ) {
    case WM_COMMAND:
        switch ( LOWORD ( wParam ) ) {
        case IDC_ON_BUTTON:
            {
                BOOL bSuccess;
                bSuccess = SystemParametersInfo ( SPI_SETSCREENSAVEACTIVE,
                    TRUE,
                    NULL,
                    SPIF_SENDCHANGE | SPIF_UPDATEINIFILE );
                if ( bSuccess )
                {
                    MessageBox ( hWnd,
                        _TEXT ( "スクリーンセーバーが開始される設定になりました。" ),
                        _TEXT ( "確認" ),
                        MB_OK );
                }
                else
                {
                    MessageBox ( hWnd,
                        _TEXT ( "スクリーンセーバーが開始される設定に変更できませんでした。" ),
                        _TEXT ( "エラー" ),
                        MB_OK | MB_ICONSTOP );
                }
            }
            return TRUE;
        case IDC_OFF_BUTTON:
            {
                BOOL bSuccess;
                bSuccess = SystemParametersInfo ( SPI_SETSCREENSAVEACTIVE,
                    FALSE,
                    NULL,
                    SPIF_SENDCHANGE | SPIF_UPDATEINIFILE );
                if ( bSuccess )
                {
                    MessageBox ( hWnd,
                        _TEXT ( "スクリーンセーバーが開始されない設定になりました。" ),
                        _TEXT ( "確認" ),
                        MB_OK );
                }
                else
                {
                    MessageBox ( hWnd,
                        _TEXT ( "スクリーンセーバーが開始されない設定に変更できませんでした。" ),
                        _TEXT ( "エラー" ),
                        MB_OK | MB_ICONSTOP );
                }
            }
            return TRUE;
        case IDCANCEL:
            EndDialog ( hWnd, 0 );
            return TRUE;
        }
        break;
    }

    return FALSE;
}


// エントリポイント
int WINAPI _tWinMain ( HINSTANCE hThisInstance,
    HINSTANCE,
    _TCHAR *,
    int )
{
    int nResponse;
    nResponse = DialogBox ( hThisInstance, MAKEINTRESOURCE ( IDD_MAIN_DIALOG ), NULL, DialogFunc );
    
    return nResponse;
}
■ resource.h
#define IDD_MAIN_DIALOG                 101
#define IDC_ON_BUTTON                   1000
#define IDC_OFF_BUTTON                  1001
■ resrc.rc
#include <winres.h>

IDD_MAIN_DIALOG DIALOG DISCARDABLE  0, 0, 203, 135
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "スクリーンセーバー 操作"
FONT 9, "MS Pゴシック"
BEGIN
    PUSHBUTTON      "&ON",IDC_ON_BUTTON,15,12,50,14
    PUSHBUTTON      "&OFF",IDC_OFF_BUTTON,83,12,50,14
    LISTBOX         IDC_LIST1,8,40,188,82,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | 
                    WS_TABSTOP
END
  ■ ご利用に際して ■ 更新履歴 ■ お問い合わせ ■ このホームページについて Copyright © 2014 A.Morita