Получить текущий системный том в Windows 7 - PullRequest
3 голосов
/ 09 января 2011

Как я могу получить текущий общий объем системы в Windows 7?

Я посмотрел в Google, но каждое решение возвращало значения типа -1 или 4686346 без четкого объяснения того, что ониимею в виду.

Ответы [ 3 ]

9 голосов
/ 11 января 2014

Хорошо, для тех, кто ищет командную строку или параметр C ++, вот некоторый источник, использующий API IAudioEndpointVolume.

Оказывается, что есть "скалярные" методы, которые хорошо работают, и возвращает число от 0 до 100 (с методами получения и установки).

Источник: https://gist.github.com/rdp/8363580

Построение командной строки здесь .

См. Также возможно https://stackoverflow.com/a/7550110/32453

8 голосов
/ 09 января 2011

Вы ищете EndpointVolume API . Это часть новых аудио-API, выпущенных в Windows Vista, и ее можно использовать для получения или установкимастер-том.

Эта задача значительно упрощается благодаря тому, что вам не нужно поддерживать версии Windows до Vista (а именно Windows XP), поскольку в соответствующие инфраструктуры были внесены существенные изменения.Релизы ОС.Вероятно, это причина того, что существующие сэмплы, которые вы пробовали, не работали должным образом.

В CodeProject доступна полная библиотека управляемых оболочек: Мастер управления громкостью Vista Core Audio API .Возможно, он реализует больше функций, чем вам нужно, но вы можете получить представление о том, что вам нужно сделать, чтобы определить основной системный том из вашего приложения на C #.

4 голосов
/ 25 июня 2015

Поскольку вы поместили C # в качестве тега, вот небольшое консольное приложение C #, которое его получает.Он основан на методе GetMasterVolumeLevelScalar (Vista или выше).

Метод GetMasterVolumeLevelScalar возвращает уровень мастер-громкости аудиопотока, который входит в конечное аудиоустройство или покидает его.Уровень громкости выражается в виде нормализованного звукового значения в диапазоне от 0,0 до 1,0.

  class Program
  {
      static void Main(string[] args)
      {
          Console.WriteLine(VolumeUtilities.GetMasterVolume());
      }
  }


  public static class VolumeUtilities
  {
      public static float GetMasterVolume()
      {
          // get the speakers (1st render + multimedia) device
          IMMDeviceEnumerator deviceEnumerator = (IMMDeviceEnumerator)(new MMDeviceEnumerator());
          IMMDevice speakers;
          const int eRender = 0;
          const int eMultimedia = 1;
          deviceEnumerator.GetDefaultAudioEndpoint(eRender, eMultimedia, out speakers);

          object o;
          speakers.Activate(typeof(IAudioEndpointVolume).GUID, 0, IntPtr.Zero, out o);
          IAudioEndpointVolume aepv = (IAudioEndpointVolume)o;
          float volume = aepv.GetMasterVolumeLevelScalar();
          Marshal.ReleaseComObject(aepv);
          Marshal.ReleaseComObject(speakers);
          Marshal.ReleaseComObject(deviceEnumerator);
          return volume;
      }

      [ComImport]
      [Guid("BCDE0395-E52F-467C-8E3D-C4579291692E")]
      private class MMDeviceEnumerator
      {
      }

      [Guid("5CDF2C82-841E-4546-9722-0CF74078229A"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
      private interface IAudioEndpointVolume
      {
          void _VtblGap1_6();
          float GetMasterVolumeLevelScalar();
      }

      [Guid("A95664D2-9614-4F35-A746-DE8DB63617E6"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
      private interface IMMDeviceEnumerator
      {
          void _VtblGap1_1();

          [PreserveSig]
          int GetDefaultAudioEndpoint(int dataFlow, int role, out IMMDevice ppDevice);
      }

      [Guid("D666063F-1587-4E43-81F1-B948E807363F"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
      private interface IMMDevice
      {
          [PreserveSig]
          int Activate([MarshalAs(UnmanagedType.LPStruct)] Guid iid, int dwClsCtx, IntPtr pActivationParams, [MarshalAs(UnmanagedType.IUnknown)] out object ppInterface);
      }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...