Да, заявления в принятом ответе не верны. Случайный сбой возможен в 64-разрядной версии Windows, поскольку переданные аргументы имеют неправильный размер. Они должны выглядеть так:
Private Const WM_SYSCOMMAND As Integer = &H112
Private Const SC_MONITORPOWER As Integer = &HF170
Private Const MonitorToLowPower As Integer = 1
Private Const MonitorShutoff As Integer = 2
<DllImport("user32.dll")> _
Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal hMsg As Integer, _
ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
SendMessage(Me.Handle, WM_SYSCOMMAND,
CType(SC_MONITORPOWER, IntPtr), CType(MonitorShutoff, IntPtr))
End Sub
Вы можете добавить проверку возвращаемого значения SendMessage (), оно должно возвращать IntPtr.Zero. Не уверен, что это полезно, для пользователя будет совершенно очевидно, что команда по какой-то причине не работает.