我的表单中有一个滑块和一个 webbrowser 对象,滑动它应该会改变音量,但是它确实会移动滑块,如下所示:
但它不会改变音量的实际输出。这可能是因为我集成了 WebBrowser 对象并使用 Windows 7。当我手动滑动滑块(在屏幕截图中看到的那个)时,音量输出确实发生了变化。播放 .wav 文件时,音量的输出会发生变化,但 WebBrowser 对象不会发生变化。
我正在使用以下代码:
Xaml
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Slider Minimum="0" Maximum="10" ValueChanged="ValueChanged"/>
</Grid>
</Window>
C#
public partial class MainWindow
{
public MainWindow()
{
InitializeComponent();
}
private void ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
// Calculate the volume that's being set
double newVolume = ushort.MaxValue * e.NewValue / 10.0;
uint v = ((uint) newVolume) & 0xffff;
uint vAll = v | (v << 16);
// Set the volume
int retVal = NativeMethods.WaveOutSetVolume(IntPtr.Zero, vAll);
Debug.WriteLine(retVal);
}
}
static class NativeMethods
{
[DllImport("winmm.dll", EntryPoint = "waveOutSetVolume")]
public static extern int WaveOutSetVolume(IntPtr hwo, uint dwVolume);
}