首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用VB.NET代码关闭监视器

如何使用VB.NET代码关闭监视器
EN

Stack Overflow用户
提问于 2011-06-03 08:15:32
回答 3查看 7.8K关注 0票数 19

如何使用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
}

更新:

我使用online developer Fusion converter

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-03 08:19:28

尝尝这个

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
票数 17
EN

Stack Overflow用户

发布于 2012-04-16 01:04:27

是的,接受答案中的声明是不正确的。在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。不是很确定它是否有用,用户很明显该命令由于某些原因不起作用。

票数 7
EN

Stack Overflow用户

发布于 2013-09-20 23:41:44

这个可以在使用VB2008的Windows7上运行。不用担心再次打开显示器,因为这就像电源选项中的“关闭显示器”一样。监视器关闭,要重新打开它,您必须按键盘上的任意键或移动鼠标。

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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6221787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档