Come posso riattivare i miei monitor Windows una volta spenti dalle impostazioni di risparmio energia?

StackOverflow https://stackoverflow.com/questions/332649

  •  22-07-2019
  •  | 
  •  

Domanda

Quindi la mia macchina Vista è impostata per spegnere i monitor dopo 10 minuti. (Nota: la macchina non è sospesa o ibernata)

Ho un'applicazione .Net in esecuzione, che deve " riattivare " il sistema in un momento specifico. Come essere umano, basta spostare il mouse o premere un tasto. Come posso farlo in modo programmatico?

Ho provato: impostando programmaticamente il cursore; utilizzando " SendKeys " ;; e persino creare CreateWaitableTimer per non sospendere (anche se non è sospeso) nella speranza che ciò possa innescare qualcosa.

Idealmente il codice in c # sarebbe fantastico, ma l'API Win corretta sarebbe sufficiente.

Molte grazie in anticipo.

È stato utile?

Soluzione

Dovresti essere in grado di controllare l'alimentazione del monitor inviando i messaggi di comando del sistema come segue. Nota che questo è testato su XP, Vista potrebbe aver cambiato le cose in qualche modo, quindi dovrai provarlo e farcelo sapere.

Questo codice è in VB ma puoi vedere la chiamata API Win32 che utilizza. Devi passare un handle di finestra alla funzione, quindi il tuo codice avrà bisogno di una finestra creata per elaborare il messaggio (basta passarlo alla funzione di elaborazione della finestra predefinita).

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top