Mute/Unmute Application Sounds

二次信任 提交于 2019-12-13 21:12:49

问题


How do I mute/unmute sounds in my application without touching the master volume control of my computer when the the code I'm using is:

My.Computer.Audio.Play(My.Resources.audio_here, AudioPlayMode.Background)

回答1:


Take a look at the waveOutSetVolume and waveOutGetVolume functions in winmm.dll

Private Declare Function waveOutSetVolume Lib "winmm.dll" (ByVal uDeviceID As Integer, ByVal dwVolume As Integer) As Integer
Private Declare Function waveOutGetVolume Lib "winmm.dll" (ByVal uDeviceID As Integer, ByRef lpdwVolume As Integer) As Integer

waveOutSetVolume Function

waveOutGetVolume Function

Depending on the OS version of your target machines, you may need to look into using the newer MMDevice and EndpointVolume APIs.

EndpointVolume Sample Code




回答2:


Finally I spend 10+ hours trying different options and translating C++ and C# codes into VB.net and finaly this one seems to work at least for me. Try it your self

Imports System.Runtime.InteropServices
Imports Microsoft.Win32

Public Class Form1

<DllImport("winmm.dll")>
Public Shared Function waveOutSetVolume(ByVal h As IntPtr, ByVal dwVolume As UInteger) As Integer
End Function


Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    Me.Show()

    Dim keyValue As String  'disable web click sound
    keyValue = "%SystemRoot%\Media\"
    If Environment.OSVersion.Version.Major = 5 AndAlso Environment.OSVersion.Version.Minor > 0 Then
        keyValue += "Windows XP Start.wav"
    ElseIf Environment.OSVersion.Version.Major = 6 Then
        keyValue += "Windows Navigation Start.wav"
    Else
        Return
    End If
    Dim key As RegistryKey = Registry.CurrentUser.OpenSubKey("AppEvents\Schemes\Apps\Explorer\Navigating\.Current", True)
    key.SetValue(Nothing, "", RegistryValueKind.ExpandString)

    Me.WebBrowser1.Navigate("https://www.youtube.com/some_video")
    waveOutSetVolume(IntPtr.Zero, 0)


End Sub

End Class




回答3:


[DllImport("winmm.dll")]
private static extern int waveOutSetVolume(IntPtr hwo, uint dwVolume);

//mute application
private void mute(){
{
    int NewVolume = 0; //set 0 to unmute
    uint NewVolumeAllChannels = (((uint)NewVolume & 0x0000ffff) | ((uint)NewVolume << 16));
    waveOutSetVolume(IntPtr.Zero, NewVolumeAllChannels);
}

//unmute application
private void unmute(){
{
    int NewVolume = 65535; //set 65535 to unmute
    uint NewVolumeAllChannels = (((uint)NewVolume & 0x0000ffff) | ((uint)NewVolume << 16));
    waveOutSetVolume(IntPtr.Zero, NewVolumeAllChannels);
}


来源:https://stackoverflow.com/questions/18745779/mute-unmute-application-sounds

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!