2008-10-29 6 views

답변

8

프로그램이 실행되는 동안 잠자기 상태가되지 않도록하려면 가장 좋은 방법은 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 
} 

, 당신은 아직도 당신이 X 밀리 초 동안 휴면하고 살아 funcation 계속 호출하는 별도의 스레드를 사용하여, 킵 얼라이브에게 많은 호출해야합니다.

무인 모드는 절전 모드를 해제하지 않으므로 장치가 이상한 반 어 웨이크 상태가됩니다.

이렇게하면 장치가 일시 중지 모드 인 동안 무인 모드를 시작하면 화면이나 아무것도 깨우지 않습니다. 모든 무인 모드는 응용 프로그램을 일시 중지하는 WM 중지입니다. 또한 다른 문제는 모든 장치에서 작동하지 않는다는 것입니다. 일부 장치의 전원 관리는 그리 좋지 않으며 어쨌든 당신이 무엇을 하든지 당신을 일시 중지시킵니다.

1

아마 (하지만 C#에서)

이 그 기사는 (당신이 할 수 있습니다 정확히하지 않은) 잠을 모바일 장치를 방지하는 방법을 설명 described here으로 "시스템 전원 상태를"수정하여, 호출하여 네이티브 함수 SystemIdleTimerReset()은 주기적으로 (장치의 전원 차단을 방지하기 위해).

6

원하는 절전 조건 (시간 초과, 배터리, AC 전원 등)에 영향을주는 the Power Manager registry setting을 수정하고 "PowerManager/ReloadActivityTimeouts"라는 명명 된 시스템 이벤트에서 SetEvent를 설정하여 OS에 설정을 다시로드하도록 지시합니다.

관련 문제