문제

Windows Mobile에서 어떻게 Sleep Mode를 프로그래밍적으로 비활성화/활성화 할 수 있는지 아는 사람이 있습니까?

감사!

도움이 되었습니까?

해결책

실행 중에 프로그램을 잠들지 않기를 원한다면 가장 좋은 방법은 SystemIdletimerReset, ShidletimerReset을 호출하고 키 터치를 시뮬레이션하는 keepalive 유형 함수를 만드는 것입니다. 그런 다음 기본적으로 모든 곳에서 많이 부를 필요가 있습니다.

#include <windows.h>
#include <commctrl.h>

extern "C"
{
    void WINAPI SHIdleTimerReset();
};

void KeepAlive()
{
    static DWORD LastCallTime = 0;
    DWORD TickCount = GetTickCount();
    if ((TickCount - LastCallTime) > 1000 || TickCount < LastCallTime) // watch for wraparound
    {
        SystemIdleTimerReset();
        SHIdleTimerReset();
        keybd_event(VK_LBUTTON, 0, KEYEVENTF_SILENT, 0);
        keybd_event(VK_LBUTTON, 0, KEYEVENTF_KEYUP | KEYEVENTF_SILENT, 0);
        LastCallTime = TickCount;
    }
}

이 메소드는 사용자가 응용 프로그램을 수동으로 시작할 때만 작동합니다.

응용 프로그램이 알림으로 시작되면 (즉, 장치가 일시 중단되는 동안), 더 많은 작업을 수행해야합니다. 그렇지 않으면 사용자가 기기가 현탁 된 모드에서 전원을 공급할 때까지 매우 짧은 시간 후에 응용 프로그램이 중단됩니다. 이를 처리하려면 장치를 무인 전원 모드로 넣어야합니다.

if(!::PowerPolicyNotify (PPN_UNATTENDEDMODE, TRUE))
{
    // handle error
}

// do long running process

if(!::PowerPolicyNotify (PPN_UNATTENDEDMODE, FALSE))
{
    // handle error
}

무인 모드 사용 중에도 keepalive를 많이 호출해야하며 x 밀리 초에 잠을 자고 Keep Alive Funcation을 호출하는 별도의 스레드를 사용할 수 있습니다.

무인 모드는 수면 모드에서 벗어나지 않으며 장치를 이상한 반쯤보기에 적용합니다.

따라서 디바이스가 현탁 모드에서 무인 모드를 시작하면 화면이나 아무것도 깨어나지 않습니다. 모든 무인 모드는 WM이 애플리케이션을 중단하는 것을 중지하는 것입니다. 또한 다른 문제는 모든 장치에서 작동하지 않으며 일부 장치 전원 관리가 그다지 좋지 않으며 어쨌든 자신이 무엇을하든 당신을 일시 중지한다는 것입니다.

다른 팁

수정하다 Power Manager 레지스트리 설정 이는 원하는 특정 수면 상태 (시간 초과, 배터, AC 전력 등) 및 "PowerManager/ReloadActivityTimeouts"라는 이름의 시스템 이벤트에서 SetEvent에 영향을 미칩니다.

아마도 "시스템 전력 상태"를 다음과 같이 수정함으로써 여기에 설명되어 있습니다 (그러나 C#)

이 기사는 또한 기본 기능 SystemIdleTimerReset ()를 주기적으로 호출하여 (장치의 전원이 떨어지지 않도록)로 호출하여 모바일 장치가 잠들지 않는 방법 (원하는 것이 아닙니다)을 방지하는 방법을 설명합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top