Громкость управления в vb.net

Мне нужно контролировать громкость основного компьютера в vb.net. Я искал в Интернете и перепробовал все примеры, которые смог найти. Ни один из них не работал.

У кого-нибудь есть фрагменты кода, которые работают с vb.net 2010 для управления громкостью?

Спасибо
Джодамелио


person giodamelio    schedule 20.01.2011    source источник


Ответы (2)


Я знаю, что этот вопрос действительно старый, но это сработало для меня:

http://www.dotnetcurry.com/showarticle.aspx?ID=431

Imports System
Imports System.Windows.Forms
Imports System.Runtime.InteropServices

Namespace WindowsFormsApplication1
    Partial Public Class Form1
        Inherits Form
        Private Const APPCOMMAND_VOLUME_MUTE As Integer = &H80000
        Private Const APPCOMMAND_VOLUME_UP As Integer = &HA0000
        Private Const APPCOMMAND_VOLUME_DOWN As Integer = &H90000
        Private Const WM_APPCOMMAND As Integer = &H319

        <DllImport("user32.dll")> _
        Public Shared Function SendMessageW(ByVal hWnd As IntPtr, _
               ByVal Msg As Integer, ByVal wParam As IntPtr, _
               ByVal lParam As IntPtr) As IntPtr
        End Function

        Private Sub btnMute_Click(ByVal sender As Object, ByVal e As EventArgs)
            SendMessageW(Me.Handle, WM_APPCOMMAND, _
                          Me.Handle, New IntPtr(APPCOMMAND_VOLUME_MUTE))
        End Sub

        Private Sub btnDecVol_Click(ByVal sender As Object, ByVal e As EventArgs)
            SendMessageW(Me.Handle, WM_APPCOMMAND, _
                         Me.Handle, New IntPtr(APPCOMMAND_VOLUME_DOWN))
        End Sub

        Private Sub btnIncVol_Click(ByVal sender As Object, ByVal e As EventArgs)
            SendMessageW(Me.Handle, WM_APPCOMMAND, _
                         Me.Handle, New IntPtr(APPCOMMAND_VOLUME_UP))
        End Sub
    End Class
End Namespace
person sarme    schedule 06.03.2014

Я нашел ответ. Он использует NirCmd от Nirsoft (32-bit, 64-разрядная версия)

Public Class Sound
    Dim nircmd As String
    Const MAXVOL As Integer = 65535

    Public Sub New(ByVal nircmd_location As String)
        nircmd = nircmd_location
    End Sub

    Public Sub setVol(ByVal level As Integer)

        Dim p As New ProcessStartInfo
        p.FileName = nircmd
        p.Arguments = "setsysvolume " & (MAXVOL * (level / 100)).ToString
        Process.Start(p)

    End Sub
End Class

Затем вы можете использовать что-то вроде

Dim vol As New Sound(path_to_nircmd)
vol.setVol(50)
person giodamelio    schedule 21.01.2011