Итак, моя машина с Vista настроена на отключение мониторов через 10 минут. (Примечание: машина не приостановлена и не находится в спящем режиме)
У меня запущено приложение .Net, которому необходимо «разбудить» систему в указанное время. Как человек, вы просто перемещаете мышь или нажимаете клавишу. Как мне сделать это программно?
Я пробовал: программно установить курсор; с помощью «SendKeys»; и даже вызывая CreateWaitableTimer для отмены приостановки (даже если она не приостановлена) в надежде, что это что-то вызовет.
В идеале код на C# был бы отличным, но подходящего Win API было бы достаточно.
Спасибо заранее.





Вы должны иметь возможность управлять мощностью монитора, отправляя системные командные сообщения следующим образом. Обратите внимание, что это проверено на 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
По словам других, это не поможет разбудить дисплей в Windows 7+. Вместо этого вы можете посмотреть на этот ответ: stackoverflow.com/a/14698416/999120
из моих тестов кажется, что действительный дескриптор окна не был обязательным. мы можем просто передать HWND_BROADCAST как hWnd. см. этот ответ: stackoverflow.com/a/42393472/1468842