2016-05-21 40 views
1

我正在为打开显示器而苦恼于此代码。我已经在Windows 10控制面板中设置了10分钟后关闭的显示屏,但我有一个用VB编写的语音识别应用程序,当我通过语音呼叫应用程序时,需要唤醒屏幕。那么是否有唤醒显示器槽的代码Visual Basic?我搜索了很长时间,但我只找到一些Java代码。谢谢你,祝你有美好的一天/晚上! :)如何用Visual Basic打开/唤醒屏幕

+0

肯定有办法通过win32 API调用来做到这一点。 – RoyalPotato

+0

大约30秒后找到它:http://www.codeproject.com/Articles/11099/Turn-on-off-monitor – RoyalPotato

+0

如果你需要我将它转换为vb给你,让我知道。 – RoyalPotato

回答

0

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 
+0

谢谢sooo!在尝试将Java和C转换为VB之后,尝试移动鼠标并成功移动光标但未唤醒屏幕!你在一个小时内完成了!现在我将它修剪出代码并将其实施到我的小型Arduino语音仪表板应用程序中。非常感谢! :) :) :) – Martin

+0

不用担心,原生windows API几乎总是答案;)。听起来也是一个很酷的项目。也许我会受到启发,将我的arduino上的灰尘擦掉,并再次玩弄它:D。 – RoyalPotato

+0

您可以使用Arduino板和VB进行串行通信来做很多事情。你甚至可以通过VB通过互联网控制电路板。 – Martin