Vb.net 按下按钮时,将除我之外的所有其他程序静音

Vb.net 按下按钮时,将除我之外的所有其他程序静音,vb.net,visual-studio,audio,mute,Vb.net,Visual Studio,Audio,Mute,我希望能够使所有其他程序静音,并在按下按钮时播放恒定的音调/声音 音调/声音作为一个资源附加在My.resources下,称为Beep\u效果 大部分代码来自其中一个答案,但仍然不起作用 这是我目前掌握的代码: Imports CSCore Imports CSCore.Codecs Imports CSCore.CoreAudioAPI Imports CSCore.SoundOut Imports System.Runtime.InteropServices Module Module1

我希望能够使所有其他程序静音,并在按下按钮时播放恒定的音调/声音

音调/声音作为一个资源附加在
My.resources
下,称为
Beep\u效果

大部分代码来自其中一个答案,但仍然不起作用

这是我目前掌握的代码:

Imports CSCore
Imports CSCore.Codecs
Imports CSCore.CoreAudioAPI
Imports CSCore.SoundOut
Imports System.Runtime.InteropServices

Module Module1

    Private filename As Object = My.Resources.Beep_effect
    Private _waveSource As IWaveSource
    Private _soundOut As ISoundOut
    Private device As MMDevice

    Sub Main()

        Using mmdeviceEnumerator = New MMDeviceEnumerator()
            Using mmdeviceCollection = mmdeviceEnumerator.EnumAudioEndpoints(DataFlow.Render, DeviceState.Active)
                device = mmdeviceCollection.First
            End Using
        End Using

        _waveSource = CodecFactory.Instance.GetCodec(filename).ToSampleSource().ToMono().ToWaveSource()
        _soundOut = New WasapiOut(False, AudioClientShareMode.Exclusive, 100) With {.device = device}
        _soundOut.Initialize(_waveSource)
        _soundOut.Play()

    End Sub

End Module

Public Class Main



    <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

    Const WM_APPCOMMAND As UInteger = &H319
    Const APPCOMMAND_VOLUME_MUTE As UInteger = &H8

    Private Sub Beep_MouseDown(sender As Object, e As EventArgs) Handles Beep.MouseDown
        Call Module1.Main()
        'My.Computer.Audio.Play(My.Resources.Beep_effect, AudioPlayMode.BackgroundLoop)
    End Sub

    Private Sub Beep_MouseUp(sender As Object, e As EventArgs) Handles Beep.MouseUp
        'My.Computer.Audio.Stop()
    End Sub

    Private Sub Silence_MouseDown(sender As Object, e As EventArgs) Handles Silence.MouseDown
        SendMessage(Handle, WM_APPCOMMAND, &H200EB0, APPCOMMAND_VOLUME_MUTE * &H10000)
    End Sub

    Private Sub Silence_MouseUp(sender As Object, e As EventArgs) Handles Silence.MouseUp
    SendMessage(Handle, WM_APPCOMMAND, &H200EB0, APPCOMMAND_VOLUME_MUTE * &H10000)
    End Sub
End Class
导入CSCore
导入CSCore.codec
导入CSCore.CoreAudioAPI
导入CSCore.SoundOut
导入System.Runtime.InteropServices
模块1
作为对象的私有文件名=My.Resources.Beep\u效果
专用波源作为IWaveSource
私密的(u)探勘
专用设备作为MMD设备
副标题()
使用mmdeviceEnumerator=新的mmdeviceEnumerator()
使用mmdeviceCollection=mmdeviceEnumerator.EnumAudioEndpoints(DataFlow.Render,DeviceState.Active)
device=mmdeviceCollection.First
终端使用
终端使用
_waveSource=CodeFactory.Instance.GetCodec(文件名).ToSampleSource().ToMono().ToWaveSource()
_soundOut=New WasapiOut(False,AudioClientShareMode.Exclusive,100),带有{.device=device}
_探测。初始化(_波源)
_播放
端接头
端模块
公共班机
私有共享函数SendMessage(ByVal hWnd作为IntPtr,ByVal Msg作为UInteger,ByVal wParam作为IntPtr,ByVal lParam作为IntPtr)作为IntPtr
端函数
常量WM_APPCOMMAND作为UInteger=&H319
Const APPCOMMAND_VOLUME_MUTE As UInteger=&H8
私有子Beep_MouseDown(发送方作为对象,e作为事件参数)处理Beep.MouseDown
调用Module1.Main()
'My.Computer.Audio.Play(My.Resources.Beep_效果,AudioPlayMode.BackgroundLoop)
端接头
私有子Beep_MouseUp(发送方作为对象,e作为事件参数)处理Beep.MouseUp
'我的.Computer.Audio.Stop()
端接头
私有子静默\u MouseDown(发送方作为对象,e作为事件参数)处理静默。MouseDown
SendMessage(句柄、WM\U APPCOMMAND和H200EB0、APPCOMMAND\U音量\U静音*&H10000)
端接头
私有子静默\u MouseUp(发送方作为对象,e作为事件参数)处理静默。MouseUp
SendMessage(句柄、WM\U APPCOMMAND和H200EB0、APPCOMMAND\U音量\U静音*&H10000)
端接头
末级
如果你还有其他问题,尽管问吧

使用和
AudioClientShareMode.Exclusive

Imports CSCore
Imports CSCore.Codecs
Imports CSCore.CoreAudioAPI
Imports CSCore.SoundOut

Module Module1

    Private filename As String = "your.mp3"
    Private _waveSource As IWaveSource
    Private _soundOut As ISoundOut
    Private device As MMDevice

    Sub Main()

        Using mmdeviceEnumerator = New MMDeviceEnumerator()
            Using mmdeviceCollection = mmdeviceEnumerator.EnumAudioEndpoints(DataFlow.Render, DeviceState.Active)
                device = mmdeviceCollection.First
            End Using
        End Using

        _waveSource = CodecFactory.Instance.GetCodec(filename).ToSampleSource().ToMono().ToWaveSource()
        _soundOut = New WasapiOut(False, AudioClientShareMode.Exclusive, 100) With {.Device = device}
        _soundOut.Initialize(_waveSource)
        _soundOut.Play()

    End Sub

End Module

好吧,那只播放一个文件,ypu试图让其他人静音的是什么?@Codexer我不明白你的意思?还有什么?我的意思是,您只显示播放音乐文件的代码,而不显示任何其他程序的静音。请尝试一下您想要实现的目标以及失败的地方,我们会帮助您解决具体问题。@Codexer OK,所以我希望它做的是使所有其他程序静音,然后在按住按钮的同时播放此文件,当它释放时,音频停止播放,音量恢复到以前的状态。我不知道该怎么做,在谷歌搜索了很多遍之后,我在这个问题上只找到了下面的评论:所以经过更多的研究,我发现了,但这并不能完全回答我的问题,我正在努力理解它。谢谢你的回答。它看起来非常完整和彻底。只有我在努力理解它如何适合我在问题中提出的代码。请你解释一下好吗?我已经更新了帖子,显示了到目前为止我所有的代码,但我似乎无法让它工作。我安装了软件包并插入了代码,但它不起作用。还有其他建议吗?@T54你确定你在帖子中添加了更多代码吗?是的,很抱歉我在添加代码之前发表了评论。此外,我还必须将文件名设置为对象而不是字符串,以说明相对文件路径。@T54文件名应为字符串,即磁盘上文件的路径。