2012-01-11 2 views
2

응용 프로그램을 항상 실행해야하는 시스템이 있습니다.윈도우에서 일시 중지 비활성화

[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Power \ Timeouts]의 레지스트리 설정을 모두 0으로 설정했습니다 (시간 초과를 비활성화해야한다고 말했음).

시스템이 여전히 일시 중단 중이며, Windows CE 6.0 R3을 최대 절전 모드로 실행하고 있습니다.

답변

3

처럼에서 AAT의 대답은 재 장전 이벤트를 유발해야합니다. 아래의 작업 구현은 다음과 같습니다.

private static void DoAutoResetEvent() 
    { 
     string eventString = "PowerManager/ReloadActivityTimeouts"; 

     IntPtr newHandle = CreateEvent(IntPtr.Zero, false, false, eventString); 
     EventModify(newHandle, (int)EventFlags.EVENT_SET); 
     CloseHandle(newHandle); 
    } 

    private enum EventFlags 
    { 
     EVENT_PULSE = 1, 
     EVENT_RESET = 2, 
     EVENT_SET = 3 
    } 

    [DllImport("coredll.dll", SetLastError = true)] 
    private static extern IntPtr CreateEvent(IntPtr lpEventAttributes, bool bManualReset, bool bInitialState, string lpName); 

    [DllImport("coredll")] 
    static extern bool EventModify(IntPtr hEvent, int func); 

    [DllImport("coredll.dll", SetLastError = true)] 
    private static extern bool CloseHandle(IntPtr hObject); 
+0

+1 : 고맙습니다. 저는 C++ 솔루션을 가지고 있었지만 시장에 남겨 두었던 틈새를 채우기 위해 손을 쓸 정도로 C#을 가지고 있지 않았습니다! – AAT

+0

@AAT : 이익 공유에 관해서 나에 관해서 만 기억하십시오.) – StaWho

1

Control\Power\Timeouts 레지스트리 항목을 변경 한 후에는 시스템에서 시간 제한 설정을 다시로드하도록 특수 이벤트를 실행해야합니다. 그것은 PowerManager/ReloadActivityTimeouts 그래서 당신은 (즉, 사용자의 희망에 따라 설정하고 해제 시간 초과 우리의 윈 CE 응용 프로그램에서 그대로입니다.)

HANDLE hEvent = CreateEvent(NULL, 
           FALSE, 
           FALSE, 
           _T("PowerManager/ReloadActivityTimeouts")); 
    if(hEvent != NULL) 
    { 
     SetEvent(hEvent); 
     CloseHandle(hEvent); 
    } 

같은 조각을 명명 된 이벤트가 필요라고

0

똑같이 잘 작동하지만 해킹으로 간주 될 수있는 또 다른 방법은 주기적으로 가짜 키 누르기를 출력하는 것입니다. 이 기능을 사용할 수 있습니다 :

keybd_event (VKEY_F24, 0, KEYEVENTF_KEYUP, 0);

VKEY_F24와 같은 존재하지 않는 키를 출력하고 키 업 코드를 사용하면 실행중인 응용 프로그램에서 시스템을 깨우기 위해 무시됩니다. 시스템의 기본 시간 제한에 따라 30 초마다 한 번씩 수행해야 할 수 있습니다.

+0

'SystemIdleTimerReset()'API를 직접 호출하여 가짜 키보드 이벤트 해킹 없이도 동일한 결과를 얻을 수 있습니다. – ctacke

+0

잘 알고 있습니다 - 감사합니다 :) – BitBank