【问题标题】:How to turn on/ wake the screen with Visual Basic如何使用 Visual Basic 打开/唤醒屏幕
【发布时间】:2016-05-21 16:50:32
【问题描述】:

我正在努力使用此代码来打开显示器。我已在 Windows 10 控制面板中将显示屏设置为在 10 分钟后关闭,但我有一个用 VB 编写的语音识别应用程序,当我通过语音调用应用程序时需要唤醒屏幕。那么是否有通过 Visual Basic 唤醒显示器的代码?我搜索了很长时间,但我只找到了一些 Java 代码。谢谢,祝你白天/晚上愉快! :)

【问题讨论】:

  • 肯定有办法通过 win32 api 调用来做到这一点。
  • 如果您需要我为您转换成vb,请告诉我。
  • 哇,是的,我找到了那个,我试图转换它,但我没有成功。我认为那是在C上,对吗?如果是这样,我将需要一些帮助。 :)
  • 请花点时间阅读How to Ask 并使用Tour 从长远来看,这将节省您的反对票。

标签: vb.net wakeup


【解决方案1】:

K,所以,在the article on codeproject 的指导下,对this questionpinvoke.net 给出的一些答案,我已经有了一些工作。它可能更干净,但我把它留给你:)。毕竟,它是你的项目;)。

Imports System.Runtime.InteropServices

Public Class Monitor
    Private Const WM_SYSCOMMAND As Integer = &H112
    Private Const SC_MONITORPOWER As Integer = &HF170
    Private Const HWND_BROADCAST As Integer = &HFFFF
    Private Const INPUT_MOUSE As Integer = 0
    Private Const MOUSEEVENTF_MOVE As Integer = 1

    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
    End Function

    <DllImport("user32.dll", SetLastError:=True)>
    Private Shared Function SendInput(<[In]()> ByVal nInput As UInt32,<[In](), MarshalAs(UnmanagedType.LPArray, ArraySubtype:=UnmanagedType.Struct, SizeParamindex:=0)> ByVal pInputs() As INPUT, <[In]()> ByVal cbInput As Int32) As UInt32
    End Function

    Private Structure INPUT
        Public type As Integer
        Public dx As Integer
        Public dy As Integer
        Public mouseData As Integer
        Public dwFlags As Integer
        Public time As Integer
        Public dwExtraInfo As IntPtr
    End Structure


    Public Shared Sub Disable()
         SendMessage(New IntPtr(HWND_BROADCAST), WM_SYSCOMMAND, SC_MONITORPOWER, New IntPtr(2))
    End Sub

    Public Shared Sub Enable()
        Dim input = New INPUT()

        input.type = INPUT_MOUSE
        input.dx = 1
        input.dy = 0
        input.mouseData = 0
        input.dwFlags = MOUSEEVENTF_MOVE
        input.time = 0
        input.dwExtraInfo = IntPtr.Zero

        SendInput(1, {input}, 28)
    End Sub
End Class

【讨论】:

  • 非常感谢!在大约安装之后,我试图将 Java 和 C 转换为 VB,试图移动鼠标,我成功地移动了光标但没有唤醒屏幕!你在一小时内做到了!现在我将删除代码并将其实现到我的小型 Arduino 语音仪表板应用程序中。太感谢了! :) :) :)
  • 不用担心,本机 Windows API 几乎总是答案 ;)。听起来也是一个很酷的项目。也许我会受到启发去擦掉我的 arduino 上的灰尘,然后再玩一遍:D.
  • 您可以使用 Arduino 板和与 VB 的串行通信做很多事情。您甚至可以通过 VB 通过 Internet 控制板子。
猜你喜欢
  • 1970-01-01
  • 2015-02-01
  • 2012-05-08
  • 1970-01-01
  • 1970-01-01
  • 2020-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多