Отключить приостановку в окне CE - PullRequest
2 голосов
/ 12 января 2012

У меня есть система, которая требует, чтобы приложение всегда работало.

Я установил все параметры реестра в [HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Power \ Timeouts] на 0 (что, как мне сказали, должно отключить тайм-аут).

Система все еще приостанавливается, мы работаем на Windows CE 6.0 R3 в режиме полного управления питанием.

Ответы [ 3 ]

3 голосов
/ 12 января 2012

Как и в ответе 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);
1 голос
/ 12 января 2012

После внесения каких-либо изменений в записи реестра Control\Power\Timeouts необходимо запустить специальное событие, чтобы система знала, что необходимо перезагрузить параметры тайм-аута. Это именованное событие с именем PowerManager/ReloadActivityTimeouts, поэтому вам нужен фрагмент вроде

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

(Это дословно из нашего приложения Win CE, которое устанавливает и отключает тайм-ауты в соответствии с пожеланиями пользователей.)

0 голосов
/ 13 января 2012

Другой метод, который одинаково хорошо работает, но может считаться хаком, - периодически выводить ложные нажатия клавиш.Эту функцию можно использовать:

keybd_event (VKEY_F24, 0, KEYEVENTF_KEYUP, 0);

Если вы выводите несуществующий ключ, такой как VKEY_F24, и используете код keyup, это не даст системе проснуться и будет игнорироваться запущенными приложениями.В зависимости от времени ожидания вашей системы по умолчанию это может потребоваться каждые 30 секунд.

...