C#設置Windows系統音量


using System;
using System.Runtime.InteropServices;
using System.Diagnostics;

namespace GavinTung
{
    class SystemMultimediaController
    {
        /*
         * 彈出系統音量控制器
         * */
        public static void PopupController()
        {
            ProcessStartInfo Info = new ProcessStartInfo();
            Info.FileName = "Sndvol32";
            Process.Start(Info);
        }

        /*
         * 獲得音量范圍和獲取/設置當前音量
         * */
        public static int MaxValue
       {
           get { return int.Parse(iMaxValue.ToString()); }
       }
        public static int MinValue
       {
           get { return int.Parse(iMinValue.ToString()); }
       }
        public static int CurrentValue
        {
            get {
                GetVolume();
                return iCurrentValue;
            }
            set {
                SetValue(MaxValue, MinValue, value);
            }
        }


        #region Private Static Data Members
        private const UInt32 iMaxValue = 0xFFFF;
        private const UInt32 iMinValue = 0x0000;
        private static int iCurrentValue = 0;
        #endregion
        #region Private Static Method
        /*
         * 得到當前音量
         **/
        private static void GetVolume()  
        {  
            UInt32 d, v;  
            d = 0;  
            long i = waveOutGetVolume(d, out v);  
            UInt32 vleft = v & 0xFFFF;  
            UInt32 vright = (v & 0xFFFF0000) >> 16;
            UInt32 all = vleft | vright;
            UInt32 value = (all * UInt32.Parse((MaxValue - MinValue).ToString())/((UInt32)iMaxValue)); 
            iCurrentValue = int.Parse(value.ToString());
        }  

        /*
         * 修改音量值
         * */
        private static void SetValue(int aMaxValue , int aMinValue, int aValue)  
        {  
            //先把trackbar的value值映射到0x0000~0xFFFF范圍  
            UInt32 Value = (UInt32)((double)0xffff * (double)aValue / (double)(aMaxValue - aMinValue));
            //限制value的取值范圍  
            if (Value < 0) Value = 0;  
            if (Value > 0xffff) Value = 0xffff;  
            UInt32 left = (UInt32)Value;//左聲道音量  
            UInt32 right = (UInt32)Value;//
            waveOutSetVolume(0, left << 16 | right); //"<<"左移,“|”邏輯或運算  
        }
        #endregion
        /*
         * 在winmm.dll中   
         *第一個參數可以為0,表示首選設備   
         *第二個參數為音量:0xFFFF為最大,0x0000為最小,
         *其中高位(前兩位)表示右聲道音量,低位(后兩位)表示左 聲道音量 。
        */
        #region Windows Media API
        [DllImport("winmm.dll")]
        private static extern long waveOutSetVolume(UInt32 deviceID, UInt32 Volume);
        [DllImport("winmm.dll")]
        private static extern long waveOutGetVolume(UInt32 deviceID, out UInt32 Volume);
        #endregion
    }
}

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM