Как включить/разбудить экран с помощью Visual Basic

Я борюсь с этим кодом для включения монитора. Я установил в панели управления Windows 10, чтобы дисплей отключался через 10 минут, но у меня есть одно приложение для распознавания голоса, написанное на VB, и мне нужно разбудить экран, когда я вызываю приложение с помощью голоса. Так есть ли код для пробуждения монитора через Visual Basic? Я долго искал, но нашел только код Java. Спасибо и хорошего дня/ночи! :)


person Martin    schedule 21.05.2016    source источник
comment
Наверняка есть способ сделать это с помощью вызовов Win32 API.   -  person RoyalPotato    schedule 21.05.2016
comment
Нашел примерно через 30 секунд: codeproject.com/Articles/11099/Turn -вне монитора   -  person RoyalPotato    schedule 21.05.2016
comment
Если вам нужно, чтобы я преобразовал его в vb для вас, дайте мне знать.   -  person RoyalPotato    schedule 21.05.2016
comment
Вау, да, я нашел это и пытался преобразовать, но мне это не удалось. Я думаю, что это на C правильно? Если да, то мне понадобится помощь. :)   -  person Martin    schedule 21.05.2016
comment
Пожалуйста, найдите время, чтобы прочитать Как задать вопрос и принять Tour Это сэкономит вам голоса в долгосрочной перспективе.   -  person Ňɏssa Pøngjǣrdenlarp    schedule 21.05.2016
comment
Я преобразовал его в vb.net (на самом деле это был С#), и он не работал на Windows10, сейчас исследую;).   -  person RoyalPotato    schedule 21.05.2016
comment
Работаю над решением, но мне пора идти, поэтому я вернусь, когда смогу :).   -  person RoyalPotato    schedule 21.05.2016
comment
Без проблем! Спасибо. :)   -  person Martin    schedule 21.05.2016
comment
Вы пробовали это решение ? Первоначально он был для Win XP, но, по-видимому, работал на Vista ... Может быть, он подойдет для Win10.   -  person Martin Verjans    schedule 21.05.2016
comment
Я пробовал, но это не работает для Windows 10. Кстати, я использую Visual Basic Express 2010. Спасибо за внимание! :)   -  person Martin    schedule 21.05.2016


Ответы (1)


K, так что, под руководством статьи о codeproject, некоторые ответов на этот вопрос и pinvoke.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
person RoyalPotato    schedule 21.05.2016
comment
Большое спасибо! Примерно после монтирования я пытался преобразовать Java и C в VB, пытаясь переместить мышь, и мне удалось переместить курсор, но не разбудить экран! Вы сделали это за один час! Теперь я урежу код и реализую его в моем небольшом приложении голосовой панели Arduino. БОЛЬШОЕ СПАСИБО! :) :) :) :) - person Martin; 22.05.2016
comment
Не беспокойтесь, родной Windows API почти всегда является ответом;). Звучит как крутой проект, тоже. Может быть, меня вдохновит стереть пыль с моего ардуино и снова поиграть с ним :D. - person RoyalPotato; 22.05.2016
comment
Вы можете делать МНОГО вещей с платой Arduino и последовательной связью с VB. Вы даже можете управлять доской через Интернет через VB. - person Martin; 22.05.2016