Как прервать Заставку под Windows 8
Я хотел бы знать, как прервать Заставку под Windows 8(встроенная версия) или Windows 10, потому что окно (C#) моего проекта работает только в нормальном состоянии, в противном случае это будет ошибкой, если запустить под заставкой. поэтому я хочу прервать экранную заставку до появления этого окна.
Я исследовал некоторые решения и идеи, которые включены, как показано ниже,
- а. Переместите мышь (использовал API user_event mouse32)
- б. Отправить ключи (также использовал API пользователя user32)
- с. Убить заставку процесса.
Оба из a & b - это способы, которые я попробовал, и они хорошо работали на Windows 10, но не работали на Windows 8(встроенная версия), поэтому в настоящее время я сосредоточен только на способе c, о способе c, который я искал, как показано ниже ссылка на сайт,
https://www.codeproject.com/Articles/17067/Controlling-The-Screen-Saver-With-C
но приведенные выше ссылки по-прежнему не работают на Windows 10 и Windows 8(встроенная версия), какой эксперт дает мне несколько советов? заранее спасибо.
1 ответ
Посмотрите на неуправляемые функции API GetSystemPowerStatus
а также SetThreadExecutionState
, Используя (потоковый) таймер, вы можете периодически обновлять статус, например, из свойства класса, и информировать систему о ваших требованиях. Это полезно, если ваше приложение может разрешать или запрещать заставку, в зависимости от ее рабочего состояния.
public class PowerManager : IDisposable
{
[Flags]
public enum ExecutionStateEnum : uint
{
LetTheSystemDecide = 0x00,
SystemRequired = 0x01,
SystemDisplayRequired = 0x02,
UserPresent = 0x04,
Continuous = 0x80000000,
}
[DllImport("kernel32")]
private static extern uint SetThreadExecutionState(ExecutionStateEnum esFlags);
public PowerManager() {}
public Update(ExecutionStateEnum state)
{
SetThreadExecutionState(state);
}
}
Обновить:
Тогда позвони PowerManager.Update(ExecutionStateEnum.SystemDisplayRequired)
отключить заставку или звонок PowerManager.Update(ExecutionStateEnum.LetTheSystemDecide)
восстановить поведение системы по умолчанию (разрешить заставку). Если метод вызывается периодически из обратного вызова таймера, настройте интервал таймера в соответствии с настроенным тайм-аутом заставки.