"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Windows의 C#에서 응용 프로그램의 양을 프로그래밍하는 방법은 무엇입니까?

Windows의 C#에서 응용 프로그램의 양을 프로그래밍하는 방법은 무엇입니까?

2025-04-12에 게시되었습니다
검색:944

How Can I Programmatically Control Application Volume in Windows Using C#?

Windows 볼륨 믹서를 사용하여 응용 프로그램 볼륨을 제어합니다

]

Applications의 볼륨 레벨은 Windows Core Audio 라이브러리, 특히 Windows 7 및 이후 운영 체제에서 쉽게 액세스하고 작동 할 수 있습니다.

코드 예 :

]

다음 C# 콘솔 애플리케이션 코드 스 니펫은 볼륨 믹서 인터페이스를 통해 응용 프로그램 볼륨을 제어하는 ​​방법을 보여줍니다 :

using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;

namespace SetAppVolume
{
    class Program
    {
        static void Main(string[] args)
        {
            const string app = "Mozilla Firefox";

            foreach (string name in EnumerateApplications())
            {
                Console.WriteLine($"应用名称: {name}");
                if (name == app)
                {
                    // 显示静音状态和音量级别(相对于主音量百分比)
                    Console.WriteLine($"静音状态: {GetApplicationMute(app)}");
                    Console.WriteLine($"音量级别: {GetApplicationVolume(app)}");

                    // 静音该应用程序
                    SetApplicationMute(app, true);

                    // 将音量设置为主音量的一半(50%)
                    SetApplicationVolume(app, 50);
                }
            }
        }

        // 获取应用程序音量
        public static float? GetApplicationVolume(string name)
        {
            ISimpleAudioVolume volume = GetVolumeObject(name);
            if (volume == null) return null;

            float level;
            volume.GetMasterVolume(out level);
            return level * 100;
        }

        // 获取应用程序静音状态
        public static bool? GetApplicationMute(string name)
        {
            ISimpleAudioVolume volume = GetVolumeObject(name);
            if (volume == null) return null;

            bool mute;
            volume.GetMute(out mute);
            return mute;
        }

        // 设置应用程序音量
        public static void SetApplicationVolume(string name, float level)
        {
            ISimpleAudioVolume volume = GetVolumeObject(name);
            if (volume == null) return;

            Guid guid = Guid.Empty;
            volume.SetMasterVolume(level / 100, ref guid);
        }

        // 设置应用程序静音状态
        public static void SetApplicationMute(string name, bool mute)
        {
            ISimpleAudioVolume volume = GetVolumeObject(name);
            if (volume == null) return;

            Guid guid = Guid.Empty;
            volume.SetMute(mute, ref guid);
        }

        // 枚举应用程序
        public static IEnumerable EnumerateApplications()
        {
            // 获取扬声器(第一个渲染 多媒体)设备
            IMMDeviceEnumerator deviceEnumerator = (IMMDeviceEnumerator)(new MMDeviceEnumerator());
            IMMDevice speakers;
            deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia, out speakers);

            // 激活会话管理器。我们需要枚举器
            Guid IID_IAudioSessionManager2 = typeof(IAudioSessionManager2).GUID;
            object o;
            speakers.Activate(ref IID_IAudioSessionManager2, 0, IntPtr.Zero, out o);
            IAudioSessionManager2 mgr = (IAudioSessionManager2)o;

            // 枚举此设备上的会话
            IAudioSessionEnumerator sessionEnumerator;
            mgr.GetSessionEnumerator(out sessionEnumerator);
            int count;
            sessionEnumerator.GetCount(out count);

            for (int i = 0; i 

이 코드는 mmdeviceapi 에 대한 참조를 추가해야합니다. COM 인터페이스는 코드에 사용되며 해당 예외를 처리해야하며 리소스 누출을 피하기 위해 COM 객체가 올바르게 릴리스되도록해야합니다. 또한 Mozilla Firefox 는 제어하려는 응용 프로그램의 이름으로 대체해야합니다. 이 코드는 참조 전용이며 실제 응용 프로그램의 특정 상황에 따라 조정해야 할 수도 있습니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3