使用win32 waveOutSetVolume函数设置目标进程的量?

时间:2015-10-28 12:19:56

标签: c# vb.net winapi audio pinvoke

我想设置正在播放音频的指定进程的音量。

我发现我可以使用waveOutSetVolume WinAPI函数来执行此操作,因为它可以按进程运行,但是,在我阅读下面的这些文档后,我仍然无法弄清楚如何执行此操作。

我在C#或VB.Net中寻找解决方案。

这是我waveOutSetVolume的公司:

<DllImport("winmm.dll", EntryPoint:="waveOutSetVolume", SetLastError:=True)>
Friend Shared Function WaveOutSetVolume(byval hwo As IntPtr, 
                                        byval dwVolume As UInteger) As Integer
End Function

这就是我试图调用函数的方式:

Public Sub SetVolume(ByVal hwo As IntPtr, ByVal volume As Integer)

    If (volume < 0) OrElse (volume > 100) Then
        Throw New ArgumentOutOfRangeException(
                  paramName:="volume", 
                  message:="A value between 0 and 100 is required.")

    Else
       Dim valueFromPercent As UShort = CUShort(volume / (100US / UShort.MaxValue))

       ' Left channel volume
        Dim loBytes As Byte() = BitConverter.GetBytes(valueFromPercent)

       ' Right channel volume
        Dim hiBytes As Byte() = BitConverter.GetBytes(valueFromPercent)

        Dim dWord As UInteger = 
            BitConverter.ToUInt32(loBytes.Concat(hiBytes).ToArray, 0)

        NativeMethods.WaveOutSetVolume(hwo, dWord)

    End If

End Sub

我知道hwo与进程句柄不同,但正如我所说,我无法弄清楚如何发现进程的两个方法。

注意我的DWORD计算似乎不是问题,因为如果我将Intptr.Zero传递给函数,那么它会设置当前应用程序的预期音量。

0 个答案:

没有答案