我想设置正在播放音频的指定进程的音量。
我发现我可以使用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
传递给函数,那么它会设置当前应用程序的预期音量。