Это сработало мгновенно. Спасибо!

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

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

 driis09 янв. 2011 г., 17:00
Пожалуйста, определите «текущий звук». Похоже, вы нашли решение для возврата дискретных значений выборок - если вам это не нужно, что вам нужно?
 user11101309 янв. 2011 г., 17:01
Ваш вопрос не совсем понятен в чем проблема. Пожалуйста, заново отредактируйте свой вопрос и включите в него такие вещи, как: Что именно вы пытаетесь сделать. Что вы пробовали (пример короткого кода помог бы, или ссылка на другой сайт, который показывает, что кто-то делает что-то подобное). Что не сработало с тем, что вы пробовали: что вы ожидали увидеть и каков был реальный результат?
 Oded09 янв. 2011 г., 17:00
Я предлагаю вам прочитать свой вопрос и задать себе вопрос - кто-нибудь поймет мой вопрос и сможет на него ответить?tinyurl.com/so-hints
 Code098709 янв. 2011 г., 17:06
извините за эту ошибку
 Cody Gray♦09 янв. 2011 г., 17:03
Вы хотите текущую настройку громкости?

Ответы на вопрос(3)

Решение Вопроса

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

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

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

 NateS14 июн. 2015 г., 05:05
Ссылка на CodeProject не работает.

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

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

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

Сборка командной строки этогоВот.

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

 NateS14 июн. 2015 г., 05:34
Вот это проблема. Можете ли вы добавить флеш и перекомпилировать? Мой mingw32 не может его собрать, и я не хочу нарушать мою рабочую настройку mingw32, играя с mingw64. Ура!
 rogerdpack24 июн. 2015 г., 12:55
хм, кажется, работает хорошо, здесь [vista] перенаправлен в файл, на этот раз добавлен сброс:sourceforge.net/projects/mplayer-edl/files/...
 NateS24 июн. 2015 г., 16:41
Отлично, спасибо! Я подтвердил, что ваша новая версия теперь может быть перенаправлена ​​в файл. Ура!
 NateS14 июн. 2015 г., 05:28
Не могу захватить вывод, например, используяgetvol.exe > file файл пуст Есть идеи?

вот небольшое консольное приложение 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);
      }
  }
 Rich12 февр. 2017 г., 18:02
Это сработало мгновенно. Спасибо!

Ваш ответ на вопрос