use*_*411 18 .net c# vb.net screen visual-studio-2010
如何使用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
}
Run Code Online (Sandbox Code Playgroud)
更新:
我使用在线开发者Fusion转换器.
Bal*_*a R 16
试试这个
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
Run Code Online (Sandbox Code Playgroud)
是的,接受的答案中的声明是不正确的.由于传递的参数大小错误,因此在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
Run Code Online (Sandbox Code Playgroud)
您可以添加对SendMessage()的返回值的检查,它应该返回IntPtr.Zero.不太确定它是否有用,对于用户而言,由于某种原因命令不起作用将是非常明显的.
| 归档时间: |
|
| 查看次数: |
6765 次 |
| 最近记录: |