Как отключить монитор с помощью кода VB.NET - PullRequest
18 голосов
/ 03 июня 2011

Как выключить монитор с помощью кода VB.NET? ОК, на самом деле я нашел решение C #. Но мне нужно решение VB.NET. Я пробовал онлайн конвертер C # в VB.NET, но конвертер жалуется, что в нем есть ошибки.

Как следующий код C # может быть переведен в VB.NET?

using System.Runtime.InteropServices; //to DllImport

public int WM_SYSCOMMAND = 0x0112;
public int SC_MONITORPOWER = 0xF170; //Using the system pre-defined MSDN constants that can be used by the SendMessage() function .

[DllImport("user32.dll")]
private static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);
//To call a DLL function from C#, you must provide this declaration.

private void button1_Click(object sender, System.EventArgs e)
{
    SendMessage( this.Handle.ToInt32() , WM_SYSCOMMAND , SC_MONITORPOWER ,2 );//DLL function
}

UPDATE:

Я использую онлайн-разработчик Fusion Converter .

Ответы [ 3 ]

16 голосов
/ 03 июня 2011

Попробуйте это

Public WM_SYSCOMMAND As Integer = &H112
Public SC_MONITORPOWER As Integer = &Hf170

<DllImport("user32.dll")> _
Private Shared Function SendMessage(hWnd As Integer, hMsg As Integer, wParam As Integer, lParam As Integer) As Integer
End Function

Private Sub button1_Click(sender As Object, e As System.EventArgs)
    SendMessage(Me.Handle.ToInt32(), WM_SYSCOMMAND, SC_MONITORPOWER, 2)
End Sub
6 голосов
/ 15 апреля 2012

Да, заявления в принятом ответе не верны. Случайный сбой возможен в 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. Не уверен, что это полезно, для пользователя будет совершенно очевидно, что команда по какой-то причине не работает.

0 голосов
/ 20 сентября 2013

этот работает на Windows 7 с использованием VB 2008. и не беспокойтесь о повторном включении монитора, потому что это похоже на «выключение дисплея» в параметрах питания. монитор выключается, и чтобы снова включить его, нужно либо нажать любую клавишу на клавиатуре, либо двигать мышью.

Imports System.Runtime.InteropServices

Public Class Monitoroff

Public WM_SYSCOMMAND As Integer = &H112

Public SC_MONITORPOWER As Integer = &HF170

<DllImport("user32.dll", SetLastError:=True)> _
Private Shared Function SendMessage(ByVal hWnd As Integer, ByVal hMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    SendMessage(Me.Handle.ToInt32(), WM_SYSCOMMAND, SC_MONITORPOWER, 2)
End Sub
End Class
...