C# 系統音量調整由程式控制

public class demo
{
    //運用WinAPI控制電腦靜音與音量
    private const int APPCOMMAND_VOLUME_MUTE = 0x80000;
    private const int APPCOMMAND_VOLUME_UP = 0x0a0000;
    private const int APPCOMMAND_VOLUME_DOWN = 0x090000;
    private const int WM_APPCOMMAND = 0x319;
    //private static IntPtr Handle;
    public static Process p = Process.GetCurrentProcess();

    [DllImport("user32.dll")]
    public static extern IntPtr SendMessageW(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);

    public static void btnVup_Click()
    {
        // 聲音變大 
        SendMessageW(p.Handle, WM_APPCOMMAND, p.Handle, (IntPtr)APPCOMMAND_VOLUME_UP);
    }

    public static void btnVdown_Click()
    {
        // 聲音變小 
        SendMessageW(p.Handle, WM_APPCOMMAND, p.Handle, (IntPtr)APPCOMMAND_VOLUME_DOWN);
    }

    public static void btnMute_Click()
    {
        // 靜音 
        SendMessageW(p.Handle, WM_APPCOMMAND, p.Handle, (IntPtr)APPCOMMAND_VOLUME_MUTE);
    }


    /**
     * xp以下的電腦適用
     * */
    [DllImport("winmm.dll")]
    public static extern int waveOutGetVolume(IntPtr hwo, out uint dwVolume);

    [DllImport("winmm.dll")]
    public static extern int waveOutSetVolume(IntPtr hwo, uint dwVolume);

    public static void vol_up()
    {
        // 設定變數CurrVol用以取得目前音量
        uint CurrVol = 0;
        // 透過waveOutGetVolume取得目前音量給變數CurrVol
        waveOutGetVolume(IntPtr.Zero, out CurrVol);
        // 計算音量大小
        ushort CalcVol = (ushort)(CurrVol & 0x0000ffff);
        // 將音量大小分為10階
        int vol_value = CalcVol / (ushort.MaxValue / 10);
        Console.WriteLine(CalcVol / (ushort.MaxValue / 10));
        // 音量值加 1
        vol_value = vol_value + 1;
        ValueChanged(vol_value);
    }

    public static void vol_down()
    {
        // 設定變數CurrVol用以取得目前音量
        uint CurrVol = 0;
        // 透過waveOutGetVolume取得目前音量給變數CurrVol
        waveOutGetVolume(IntPtr.Zero, out CurrVol);
        // 計算音量大小
        ushort CalcVol = (ushort)(CurrVol & 0x0000ffff);
        // 將音量大小分為10階
        int vol_value = CalcVol / (ushort.MaxValue / 10);
        Console.WriteLine(CalcVol / (ushort.MaxValue / 10));
        // 音量值減 1
        vol_value = vol_value - 1;
        ValueChanged(vol_value);
    }

    // 值改變時,設定音量
    private static void ValueChanged(int value)
    {
        // 計算要設定的音量大小
        int NewVolume = ((ushort.MaxValue / 10) * value);
        // 設定相同的數值於左聲道與右聲道
        uint NewVolumeAllChannels = (((uint)NewVolume & 0x0000ffff) | ((uint)NewVolume << 16));
        // 設定音量
        waveOutSetVolume(IntPtr.Zero, NewVolumeAllChannels);
    }
}

留言

這個網誌中的熱門文章

C# 模擬鍵盤滑鼠控制電腦

python pyautogui 簡介

android 定時通知(永久長期的) 本篇只講AlarmManager使用

raspberrypi 開機自動執行程式 與 在terminal開啟第二個terminal執行python

python nn 聲音辨識 -1 傅立葉轉換