응용 프로그램을 항상 실행해야하는 시스템이 있습니다.윈도우에서 일시 중지 비활성화
[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Power \ Timeouts]의 레지스트리 설정을 모두 0으로 설정했습니다 (시간 초과를 비활성화해야한다고 말했음).
시스템이 여전히 일시 중단 중이며, Windows CE 6.0 R3을 최대 절전 모드로 실행하고 있습니다.
응용 프로그램을 항상 실행해야하는 시스템이 있습니다.윈도우에서 일시 중지 비활성화
[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Power \ Timeouts]의 레지스트리 설정을 모두 0으로 설정했습니다 (시간 초과를 비활성화해야한다고 말했음).
시스템이 여전히 일시 중단 중이며, Windows CE 6.0 R3을 최대 절전 모드로 실행하고 있습니다.
처럼에서 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);
Control\Power\Timeouts
레지스트리 항목을 변경 한 후에는 시스템에서 시간 제한 설정을 다시로드하도록 특수 이벤트를 실행해야합니다. 그것은 PowerManager/ReloadActivityTimeouts
그래서 당신은 (즉, 사용자의 희망에 따라 설정하고 해제 시간 초과 우리의 윈 CE 응용 프로그램에서 그대로입니다.)
HANDLE hEvent = CreateEvent(NULL,
FALSE,
FALSE,
_T("PowerManager/ReloadActivityTimeouts"));
if(hEvent != NULL)
{
SetEvent(hEvent);
CloseHandle(hEvent);
}
같은 조각을 명명 된 이벤트가 필요라고
똑같이 잘 작동하지만 해킹으로 간주 될 수있는 또 다른 방법은 주기적으로 가짜 키 누르기를 출력하는 것입니다. 이 기능을 사용할 수 있습니다 :
keybd_event (VKEY_F24, 0, KEYEVENTF_KEYUP, 0);
VKEY_F24와 같은 존재하지 않는 키를 출력하고 키 업 코드를 사용하면 실행중인 응용 프로그램에서 시스템을 깨우기 위해 무시됩니다. 시스템의 기본 시간 제한에 따라 30 초마다 한 번씩 수행해야 할 수 있습니다.
+1 : 고맙습니다. 저는 C++ 솔루션을 가지고 있었지만 시장에 남겨 두었던 틈새를 채우기 위해 손을 쓸 정도로 C#을 가지고 있지 않았습니다! – AAT
@AAT : 이익 공유에 관해서 나에 관해서 만 기억하십시오.) – StaWho