60

C#アプリケーションを使用してWindowsシステムの音量を変更するにはどうすればよいですか?

4

6 に答える 6

88

私はパーティーに少し遅れていますが、あなたが今探しているなら、オーディオの相互作用を単純化する利用可能なnugetパッケージ( AudioSwitcher.AudioApi.CoreAudio )があります。インストールすると、次のように簡単になります。

CoreAudioDevice defaultPlaybackDevice = new CoreAudioController().DefaultPlaybackDevice;
Debug.WriteLine("Current Volume:" + defaultPlaybackDevice.Volume);
defaultPlaybackDevice.Volume = 80;
于 2016-11-01T14:18:10.320 に答える
54

コードは次のとおりです。

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace Test
{
    public class Test
    {
        private const int APPCOMMAND_VOLUME_MUTE = 0x80000;
        private const int APPCOMMAND_VOLUME_UP = 0xA0000;
        private const int APPCOMMAND_VOLUME_DOWN = 0x90000;
        private const int WM_APPCOMMAND = 0x319;

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

        private void Mute()
        {
            SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle,
                (IntPtr)APPCOMMAND_VOLUME_MUTE);
        }

        private void VolDown()
        {
            SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle,
                (IntPtr)APPCOMMAND_VOLUME_DOWN);
        }

        private void VolUp()
        {
            SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle,
                (IntPtr)APPCOMMAND_VOLUME_UP);
        }
    }
}

dotnetcurryで見つかりました

new WindowInteropHelper(this).HandleWPFを使用する場合は、代わりに使用する必要がありますthis.Handle (Alex Bealsに感謝)

于 2012-10-30T12:56:35.490 に答える
15

他の回答で提供されているチュートリアルがあまりにも複雑な場合は、keybd_event関数を使用してこのような実装を試すことができます

[DllImport("user32.dll")]
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);

使用法:

keybd_event((byte)Keys.VolumeUp, 0, 0, 0); // increase volume
keybd_event((byte)Keys.VolumeDown, 0, 0, 0); // decrease volume
于 2012-10-30T12:55:40.063 に答える
14

Core Audio APIを使用して正確な値に設定する場合は、次のようにします。

using CoreAudioApi;

public class SystemVolumeConfigurator
{
        private readonly MMDeviceEnumerator _deviceEnumerator = new MMDeviceEnumerator();
        private readonly MMDevice _playbackDevice;

        public SystemVolumeConfigurator()
        {
            _playbackDevice = _deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia);
        }

        public int GetVolume()
        {
            return (int)(_playbackDevice.AudioEndpointVolume.MasterVolumeLevelScalar * 100);
        }

        public void SetVolume(int volumeLevel)
        {
            if (volumeLevel < 0 || volumeLevel > 100)
                throw new ArgumentException("Volume must be between 0 and 100!");

            _playbackDevice.AudioEndpointVolume.MasterVolumeLevelScalar = volumeLevel / 100.0f;
        }
}
于 2016-02-26T19:40:45.267 に答える
1

このライブラリhttps://gist.github.com/sverrirs/d099b34b7f72bb4fb386をプロジェクトに追加して、次のように音量を変更できます。

VideoPlayerController.AudioManager.SetMasterVolume(100);

ライブラリには、アプリケーションの音量の変更、ミュート、現在の音量レベルの取得などのオプションも含まれています。名前空間は「ビデオプレーヤーコントローラー」と呼ばれますが、Windowsフォームアプリでシステムの音量を変更するために使用したので、「ビデオ「部分は任意です。

于 2020-08-22T09:17:35.963 に答える
0

私のコードは少し異なりますが、それでもCoreAudioを使用しています

pkgをダウンロードしました:nuget install AudioSwitcher.AudioApi.CoreAudio -Version 3.0.0.1

using AudioSwitcher.AudioApi.CoreAudio;
public partial class MainWindow : Window
{
public MainWindow()
{

InitializeComponent();

CoreAudioDevice defaultPlaybackDevice = new CoreAudioController().DefaultPlaybackDevice;

double vol = defaultPlaybackDevice.Volume;

defaultPlaybackDevice.Volume = defaultPlaybackDevice.Volume - 5.0;

defaultPlaybackDevice.Volume = defaultPlaybackDevice.Volume + 5.0;
}
}
于 2018-08-18T13:39:06.980 に答える