这将通过Trackbar更改应用程序的卷(1-100,1%到100%):
public static class NativeMethods
{
//Winm WindowsSound
[DllImport("winmm.dll")]
internal static extern int waveOutGetVolume(IntPtr hwo, out uint dwVolume);
[DllImport("winmm.dll")]
internal static extern int waveOutSetVolume(IntPtr hwo, uint dwVolume);
}
private void trackBar1_Scroll(object sender, EventArgs e)
{
uint CurrVol = ushort.MaxValue / 2;
NativeMethods.waveOutGetVolume(IntPtr.Zero, out CurrVol);
ushort CalcVol = (ushort)(CurrVol & 0x0000ffff);
int NewVolume = ((ushort.MaxValue / 100) * trackBar1.Value);
uint NewVolumeAllChannels = (((uint)NewVolume & 0x0000ffff) | ((uint)NewVolume << 16));
NativeMethods.waveOutSetVolume(IntPtr.Zero, NewVolumeAllChannels);
label1.Text = Convert.ToString("Volume: " + trackBar1.Value + "%");
}是否可以让String.Format使用多个参数/值?
例如:
String Status = String.Format("Current Buffer: {0}", waveProvider.BufferedDuration.Milliseconds, TimesBufferClear) + " Clear: " + TimesBufferClear.ToString() + " Ping: " + PingReply + " Buffer: " + SendStream.BufferMilliseconds;在那里,我想把它用在每件事上,因为它们的工作原理都差不多。但是如果我每次都要写String.Format的话,它会占用更多的空间。
这段代码可以吗,还是可以改进呢?
发布于 2013-08-29 11:00:17
在6行代码中,没有太多可查看的内容。但是哦,好吧。
CurrVol是毫无意义的,因为它的值无论如何都会被覆盖,不是吗?而且,如果这是您的真正代码,您不必收到当前的卷,以设置它的开始。Convert.ToString应该重构为String.Format("Volume: {0}%", trackBar1.Value);。更复杂的例子: var status =String.Format(“当前缓冲区:{0}清除:{1} Ping:{2}缓冲区:{3}",waveProvider.BufferedDuration.Milliseconds,TimesBufferClear,PingReply,SendStream.BufferMilliseconds);https://codereview.stackexchange.com/questions/30413
复制相似问题