Для предотвращения запуска заставки в Windows 10 правильный путь - использовать SetThreadExecutionState через P/Invoke. Любые другие методы с симуляцией нажатия клавиш или движением курсора мыши мешают пользователю и ломают логику работы системы.
Вам нужно импортировать функцию из kernel32.dll и вызывать ее с нужными флагами. Вот рабочий пример кода:
using System;
using System.Runtime.InteropServices;
public class SystemSleepPreventer
{
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern uint SetThreadExecutionState(uint esFlags);
private const uint ES_CONTINUOUS = 0x80000000;
private const uint ES_DISPLAY_REQUIRED = 0x00000002;
private const uint ES_SYSTEM_REQUIRED = 0x00000001;
public static void PreventSleep()
{
SetThreadExecutionState(ES_CONTINUOUS | ES_DISPLAY_REQUIRED | ES_SYSTEM_REQUIRED);
}
public static void AllowSleep()
{
SetThreadExecutionState(ES_CONTINUOUS);
}
}
Вызывайте PreventSleep при старте видео, а AllowSleep - при паузе или остановке. Обратите внимание, что состояние привязано к потоку. Если ваш поток завершится, Windows автоматически вернет стандартный режим сна для монитора.
Спасибо, проверил, метод рабочий. Теперь экран не тухнет во время воспроизведения.