2016-07-08 5 views
0

내 UWP 앱에서 "kernel32.dll"의 SetWaitableTimer를 사용합니다. 내 응용 프로그램 때문에 컴퓨터가 잠자기에서 깨어나기를 원합니다. 디버그 모드에서 앱을 실행하면 제대로 작동합니다. 릴리스 모드에서 실행하면 컴퓨터가 깨어나지 않습니다.유니버설 윈도우 플랫폼에서 SetWaitableTimer 사용하기

실현 모드에서 응용 프로그램이 컴퓨터를 깨우도록하려면 어떻게합니까?

private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     Task.Factory.StartNew(SetWaitForWakeUpTime); 
    } 

    [DllImport("kernel32.dll")] 
    public static extern IntPtr CreateWaitableTimer(IntPtr lpTimerAttributes, bool bManualReset, string lpTimerName); 

    [DllImport("kernel32.dll")] 
    public static extern bool SetWaitableTimer(IntPtr hTimer, [In] ref long pDueTime, int lPeriod, 
               IntPtr pfnCompletionRoutine, IntPtr lpArgToCompletionRoutine, bool fResume); 

    [DllImport("kernel32.dll", SetLastError = true)] 
    public static extern Int32 WaitForSingleObject(IntPtr handle, uint milliseconds); 

    static IntPtr handle; 

    static void SetWaitForWakeUpTime() 
    { 
     long duetime = -600000000; 

     handle = CreateWaitableTimer(IntPtr.Zero, true, "MyWaitabletimer"); 
     SetWaitableTimer(handle, ref duetime, 0, IntPtr.Zero, IntPtr.Zero, true); 
     uint INFINITE = 0xFFFFFFFF; 
     int ret = WaitForSingleObject(handle, INFINITE); 
    } 

답변

0

윈도우 10 유니버설 윈도우 플랫폼 (UWP) 응용 프로그램은 Win32 및 COM API를의 부분 집합을 사용할 수 있습니다. 이 API 하위 집합은 Windows 런타임, HTML/CSS 또는 기타 지원되는 언어 나 표준에서 다루지 않은 Windows 런타임 응용 프로그램의 주요 시나리오를 지원하기 위해 선택되었습니다. Windows App 인증 키트는 App이 Win32 및 COM API의 하위 집합 만 사용하도록합니다. UWP에서 사용할 수있는 Win32 API는 Win32 and COM APIs for UWP apps을 참조하십시오.

불행히도 CreateWaitableTimerSetWaitableTimer은 지원되는 API에 포함되어 있지 않습니다. 우리는 UWP 애플 리케이션에서 그들을 사용할 수 없습니다. UWP 앱의 경우 시스템이 절전 모드에서 깨어나서는 안됩니다. 그러나 DisplayRequest class을 사용하여 시스템이 절전 모드가되지 않도록 할 수 있습니다.

사용자가 입력하지 않고 오랫동안 비디오를 보거나 실행하는 응용 프로그램은 DisplayRequest::RequestActive을 호출하여 디스플레이가 켜져 있도록 요청할 수 있습니다. 디스플레이 요청이 활성화되면 앱이 표시되는 동안 기기의 디스플레이가 계속 켜져 있습니다.

더 많은 정보 plesae 비고 DisplayRequest class를 참조하십시오.

기업용 앱을 개발중인 경우 Brokered Windows Runtime Components으로 시도해 볼 수 있습니다. 이를 통해 UWP App에서이 코드와 상호 작용하면서 한 프로세스 (데스크톱 구성 요소)에서 기존 데스크톱 소프트웨어 자산을 실행할 수 있습니다. 자세한 내용은 this blog을 확인하십시오.