Написал программу, которая должна работать круглосуточно, поставил ее на ноутбук.
Как она работет:
Есть рассписание и если в определенные промежутки времени срабатывает условие, то программа выполняет определенные действия, иначе если это не тот промежуток времени или если условие не срабатывает, то программа просто крутит зацикленное видео. Так вот, если долго не срабатывет условие, то даже не смотря на то, что видео идет, компьютер переходит в спящий режим.
Пробовал через powercfg.cpl, поставил "Отключать дисплей" и "Переводить компьютер в спящий режим" на НИКОГДА, но не помогло.
Скажите пожалуйста, как это можно поправить?
Вот тут перечислены следующие варианты:
DisplayRequest метод RequestActiveВоспользоваться WinAPI SetThreadExecutionState и вызвать как-то так(сорс):
// Set new state to prevent system sleep
fPreviousExecutionState = NativeMethods.SetThreadExecutionState(
NativeMethods.ES_CONTINUOUS | NativeMethods.ES_SYSTEM_REQUIRED);
internal static class NativeMethods
{
// Import SetThreadExecutionState Win32 API and necessary flags
[DllImport("kernel32.dll")]
public static extern uint SetThreadExecutionState(uint esFlags);
public const uint ES_CONTINUOUS = 0x80000000;
public const uint ES_SYSTEM_REQUIRED = 0x00000001;
}
Слушать WM_POWERBROADCAST сообщение. (Сорс EnSO)
protected override void WndProc(ref System.Windows.Forms.Message m)
{
// Power status event triggered
if(m.Msg == (int)WindowMessage.WM_POWERBROADCAST)
{
// Machine is trying to enter suspended state
if(m.WParam.ToInt32() == (int)WindowMessage.PBT_APMQUERYSUSPEND ||
m.WParam.ToInt32() == (int)WindowMessage.PBT_APMQUERYSTANDBY)
{
// Have perms to deny this message?
if((m.LParam.ToInt32() & 0x1) != 0)
{
// If so, deny broadcast message
m.Result = new IntPtr((int)WindowMessage.BROADCAST_QUERY_DENY);
}
}
return;
}
base.WndProc(ref m);
}
}
internal enum WindowMessage
{
/// <summary>
/// Notify that machine power state is changing
/// </summary>
WM_POWERBROADCAST = 0x218,
/// <summary>
/// Message indicating that machine is trying to enter suspended state
/// </summary>
PBT_APMQUERYSUSPEND = 0x0,
PBT_APMQUERYSTANDBY = 0x0001,
/// <summary>
/// Message to deny broadcast query
/// </summary>
BROADCAST_QUERY_DENY = 0x424D5144
}
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости