/*
// 시스템 대기모드(절전 모드, 스크린세이버) 들어가는 것 방지, cpp(c++) source code, windows api 이용

    - prevent Sleep, Screen Saver, Hibernate


// 주기적으로 호출해 줘야 한다.
#define SYS_AWAKE_NONE        0
#define SYS_AWAKE_ALL        1
#define SYS_AWAKE_SYSTEM    2
#define SYS_AWAKE_DISPLAY    3
*/
int SetAwake(int nMode)
{
    //SystemIdleTimerReset() Windows CE, Windows Mobile

    //대기모드 중지 상태로 변경
    // ES_DISPLAY_REQUIRED : 디스플레이 강제 유지
    // ES_SYSTEM_REQUIRED : 시스템 강제 유지
    switch( nMode)
    {
    case SYS_AWAKE_NONE: SetThreadExecutionState(ES_CONTINUOUS ); break;//강제 유지 끄기, 대기모드 가능 상태로 변경

#if _MSC_VER > 1200 //(VC6이상)
        //W7에서 작동 OK
    case SYS_AWAKE_ALL: SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_DISPLAY_REQUIRED | ES_AWAYMODE_REQUIRED);
        break;//
#else
        //VC6, XP에서 안됨
    case SYS_AWAKE_ALL: SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_DISPLAY_REQUIRED ); break;//
#endif

    case SYS_AWAKE_SYSTEM: SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED ); break;
    case SYS_AWAKE_DISPLAY: SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED ); break;
    }

    //
    if( nMode == SYS_AWAKE_ALL ){
        SystemParametersInfo (SPI_SETLOWPOWERTIMEOUT, 0, NULL, 0);
        SystemParametersInfo (SPI_SETPOWEROFFTIMEOUT, 0, NULL, 0);
        SystemParametersInfo (SPI_SETSCREENSAVETIMEOUT, 0, NULL, 0);
        SystemParametersInfo (SPI_SETSCREENSAVEACTIVE, 0, NULL, 0);
        //하드끄기 방지- 임의파일을 열고 닫는다.
        FILE *fp=fopen("_temp.txt_", "w");
        if( fp ){ fputs("123", fp);    fclose(fp);    }

    }
    if( nMode == SYS_AWAKE_NONE ){
        SystemParametersInfo (SPI_SETLOWPOWERTIMEOUT, 30, NULL, 0);
        SystemParametersInfo (SPI_SETPOWEROFFTIMEOUT, 30, NULL, 0);
        SystemParametersInfo (SPI_SETSCREENSAVETIMEOUT, 30, NULL, 0);
        SystemParametersInfo (SPI_SETSCREENSAVEACTIVE, TRUE, NULL, 0);
    }

    return 1;
}


http://www.codeproject.com/KB/cpp/winmgr.aspx
http://www.codeproject.com/KB/system/disablescreensave.aspx
http://msdn.microsoft.com/en-us/library/aa373208%28VS.85%29.aspx

Posted by 코덴스

댓글을 달아 주세요