2012-04-07 10 views
2

어떤 종류의 미디어를 재생하는 응용 프로그램이 있으며 응용 프로그램이 실행될 때 컴퓨터가 잠자기하지 못하게하고 싶습니다. 필자는 P/Invoke를 통해이 작업을 수행 할 수 있다는 사실을 알게되었습니다.컴퓨터가 잠자기 상태가되는 것을 방지합니다.

디스플레이가 꺼져 있어야하며 컴퓨터가 절전 모드로 전환되지 않아야합니다. 그래서 다음과 같이 테스트했습니다.

b.Click += (x, y) => 
       { 
        SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS | EXECUTION_STATE.ES_AWAYMODE_REQUIRED); 
        Debug.WriteLine("Power line executed"); 
       }; 

[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] 
     public static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags); 

     [FlagsAttribute] 
     public enum EXECUTION_STATE : uint 
     { 
      ES_AWAYMODE_REQUIRED = 0x00000040, 
      ES_CONTINUOUS = 0x80000000, 
      ES_DISPLAY_REQUIRED = 0x00000002, 
      ES_SYSTEM_REQUIRED = 0x00000001 
     } 

그러나 컴퓨터는 잠시 후 절전 모드로 전환되었습니다. 여기서 누락 된 것이 무엇입니까?

+0

수퍼 유저에게 더 좋은 답변을 얻을 수 있습니다. –

+2

@ David, 그는 프로그래밍 방식의 솔루션을 찾고 있습니다. –

+0

가능한 복제본 [C# : 대기 모드로 들어가는 것을 방지하는 방법] (http://stackoverflow.com/questions/789039/c-how-to-prevent-a-laptop-fromgoing-into- 대기) –

답변

4

XP에서는 자리 비움 모드가 지원되지 않습니다. 연속 | 디스플레이 | 대신 시스템.

+0

저는 Windows 7에 있습니다. – Cipher

+0

글쎄요, 중요하지 않습니다. 사용자가 실행하는 것이 중요합니다. 그래도 문제가 계속되면 제어판 + 전원에서 공급 업체가 추가 한 것을 찾아보고이를 망쳐 놓으십시오. –

+0

이 페이지 http://pinvoke.net/default.aspx/kernel32/SetThreadExecutionState.html은 'Continuous' 및'Display Required' 플래그로 만 모니터 전원 끄기를 참조했습니다. 그게 맞습니까, 아니면'연속적으로'와'디스플레이 필요'가 또한 잠을 방해합니까? 나에게 : 이것은 작동하지 않으며 컴퓨터는 여전히 잠자기 상태이며 기본 전원 설정을 갖춘 표준 홈 OS에 있습니다. – Cipher

3

SetThreadExecutionState

모드를 얻어 사용하려면, 애플리케이션 및 ES_AWAYMODE_REQUIRED ES_CONTINUOUS 모두 사용; 부재 모드를 사용하지 않으려면 응용 프로그램이 ES_CONTINUOUS를 사용하여 SetThreadExecutionState를 호출하고 ES_AWAYMODE_REQUIRED를 지 웁니다. 자리 비움 모드가 활성화되면 컴퓨터를 절전 모드로 전환하는 작업으로 인해 자리 비움 모드가됩니다. 시스템이 사용자 입력이 필요없는 작업을 계속 수행하는 동안 컴퓨터가 잠자고있는 것처럼 보입니다. 자리 비움 모드는 슬립 유휴 타이머에 영향을주지 않습니다. 타이머가 만료 될 때 시스템이 절전 모드로 들어가는 것을 방지하려면 응용 프로그램에서 ES_SYSTEM_REQUIRED 값도 설정해야합니다.

관련 문제