Как прервать Заставку под Windows 8

Я хотел бы знать, как прервать Заставку под Windows 8(встроенная версия) или Windows 10, потому что окно (C#) моего проекта работает только в нормальном состоянии, в противном случае это будет ошибкой, если запустить под заставкой. поэтому я хочу прервать экранную заставку до появления этого окна.

Я исследовал некоторые решения и идеи, которые включены, как показано ниже,

  • а. Переместите мышь (использовал API user_event mouse32)
  • б. Отправить ключи (также использовал API пользователя user32)
  • с. Убить заставку процесса.

Оба из a & b - это способы, которые я попробовал, и они хорошо работали на Windows 10, но не работали на Windows 8(встроенная версия), поэтому в настоящее время я сосредоточен только на способе c, о способе c, который я искал, как показано ниже ссылка на сайт,

https://support.microsoft.com/en-us/help/140723/how-to-force-a-screen-saver-to-close-once-started-in-windows-nt,-windows-2000,-and-windows-server-2003

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) восстановить поведение системы по умолчанию (разрешить заставку). Если метод вызывается периодически из обратного вызова таймера, настройте интервал таймера в соответствии с настроенным тайм-аутом заставки.

Другие вопросы по тегам