Как разбудить мониторы Windows после выключения из-за настроек питания?

Итак, моя машина с Vista настроена на отключение мониторов через 10 минут. (Примечание: машина не приостановлена ​​и не находится в спящем режиме)

У меня запущено приложение .Net, которому необходимо «разбудить» систему в указанное время. Как человек, вы просто перемещаете мышь или нажимаете клавишу. Как мне сделать это программно?

Я пробовал: программно установить курсор; с помощью «SendKeys»; и даже вызывая CreateWaitableTimer для отмены приостановки (даже если она не приостановлена) в надежде, что это что-то вызовет.

В идеале код на C# был бы отличным, но подходящего Win API было бы достаточно.

Спасибо заранее.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
2 330
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны иметь возможность управлять мощностью монитора, отправляя системные командные сообщения следующим образом. Обратите внимание, что это проверено на XP, Vista, возможно, несколько изменила ситуацию, поэтому вам нужно протестировать ее и сообщить нам.

Этот код находится на VB, но вы можете видеть вызов API Win32, который он использует. Вам необходимо передать дескриптор окна функции, поэтому вашему коду потребуется окно, созданное для обработки сообщения (просто передайте его в функцию обработки окна по умолчанию).

Const SC_MONITORPOWER As Integer = &HF170
Const WM_SYSCOMMAND As Short = &H112S
Private Function SendMessage(
    ByVal Handle As Int32,
    ByVal wMsg As Int32,
    ByVal wParam As Int32,
    ByVal lParam As Int32) As Int32
End Function
Sub MonStandBy(hWnd as Int32)
    SendMessage(hWnd, WM_SYSCOMMAND, SC_MONITORPOWER, 1)
End Sub
Sub MonOff(hWnd as Int32)
    SendMessage(hWnd, WM_SYSCOMMAND, SC_MONITORPOWER, 2)
End Sub
Sub MonOn(hWnd as Int32)
    SendMessage(hWnd, WM_SYSCOMMAND, SC_MONITORPOWER, -1)
End Sub

из моих тестов кажется, что действительный дескриптор окна не был обязательным. мы можем просто передать HWND_BROADCAST как hWnd. см. этот ответ: stackoverflow.com/a/42393472/1468842

Opmet 22.02.2017 18:57

По словам других, это не поможет разбудить дисплей в Windows 7+. Вместо этого вы можете посмотреть на этот ответ: stackoverflow.com/a/14698416/999120

Doin 20.01.2019 12:47

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