Как мне разбудить мои мониторы Windows, когда они выключены в настройках питания? - PullRequest
3 голосов
/ 02 декабря 2008

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

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

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

В идеале код на c # был бы великолепен, но правильного Win API было бы достаточно.

Большое спасибо заранее.

1 Ответ

3 голосов
/ 02 декабря 2008

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

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

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
...