Общая громкость звука
От: drpops  
Дата: 02.01.17 17:21
Оценка:
Добрый день,

Подскажите, пожалуйста, программно прочитать/изменить общую громкость звука в системе
Те примеры что я нашел работают только до ХР включительно. На Vista+ идут лесом.
собственно нужно немного:
— прочитать уровень
— изменить уровень
— mute on/off
— прочитать режим mute включено или выключено

Неплохо бы примерчик (рабочий ес-но на Windows 7-10)
Нужно на Delphi но и на C++ подойдет. Портировать несложно.

Что-то с налету здесь не нашел ничего толкового.
Подскажите куда смотреть, если обсуждалось уже
sound volume mute
Re: Общая громкость звука
От: VTT http://vtt.to
Дата: 02.01.17 18:14
Оценка:
EndpointVolume API
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.
Re[2]: Общая громкость звука
От: drpops  
Дата: 02.01.17 19:09
Оценка:
Здравствуйте, VTT, Вы писали:

VTT>EndpointVolume API

Я уже вокруг него хожу долго...
как получить объект интерфейса IMMDevice?
И какие значения констант (например IID_IAudioClient и IID_ISimpleAudioVolume) ?
где их взять?
Re[3]: Общая громкость звука
От: VTT http://vtt.to
Дата: 02.01.17 20:19
Оценка:
Здравствуйте, drpops, Вы писали:

D>Здравствуйте, VTT, Вы писали:


VTT>>EndpointVolume API

D>Я уже вокруг него хожу долго...
D>как получить объект интерфейса IMMDevice?
D>И какие значения констант (например IID_IAudioClient и IID_ISimpleAudioVolume) ?
D>где их взять?

Вам скорее нужен интерфейс IAudioEndpointVolume,
который можно получить вызвав метод Activate интерфейса IMMDevice,
который можно получить вызвав метод GetDefaultAudioEndpoint интерфейса IMMDeviceEnumerator,
который можно получить вызвав метод CoCreateInstance.
Значения констант можно поискать рядом с объявлением нужного интерфейса в соответствующем заголовочном файле.
Нужные заголовочные файлы обычно указываются на MSDN внизу страниц, в разделе Requirements.
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.
Re[3]: Общая громкость звука
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 18.01.17 11:22
Оценка:
Здравствуйте, drpops, Вы писали:

D>Здравствуйте, VTT, Вы писали:


VTT>>EndpointVolume API

D>Я уже вокруг него хожу долго...
D>как получить объект интерфейса IMMDevice?
Если не знаешь как, то пора озаботиться изучением модели COM и как его готовить с direct sound. Также рекомендую почитать что такое atl и как его использовать с COM.
Sic luceat lux!
Re[4]: Общая громкость звука
От: drpops  
Дата: 07.02.17 13:49
Оценка:
Здравствуйте, VTT, Вы писали:

VTT>Здравствуйте, drpops, Вы писали:


D>>Здравствуйте, VTT, Вы писали:


VTT>Вам скорее нужен интерфейс IAudioEndpointVolume,

VTT>который можно получить вызвав метод Activate интерфейса IMMDevice,
VTT>который можно получить вызвав метод GetDefaultAudioEndpoint интерфейса IMMDeviceEnumerator,
VTT>который можно получить вызвав метод CoCreateInstance.
VTT>Значения констант можно поискать рядом с объявлением нужного интерфейса в соответствующем заголовочном файле.
VTT>Нужные заголовочные файлы обычно указываются на MSDN внизу страниц, в разделе Requirements.

Спасибо большое. Даже нашел портирование на делфи вот тут http://www.cyberforum.ru/delphi/thread430568.html
(если кому интересно, конечно) пока ковыряюсь, только сейчас руки дошли...

кстати в процессе поисков набрел на совершенно простой код. Может кому сгодится
Главное — работает.
Повысить громкость
понизить громкость
вкл-выкл Mute
значения считать нельзя, просто имитация клавиш громкости
const
  APPCOMMAND_VOLUME_MUTE = $80000;
  APPCOMMAND_VOLUME_UP = $A0000;
  APPCOMMAND_VOLUME_DOWN = $90000;

procedure TForm4.Button4Click(Sender: TObject);
begin
  SendMessage(handle, WM_APPCOMMAND, handle, APPCOMMAND_VOLUME_UP);
end;

procedure TForm4.Button5Click(Sender: TObject);
begin
  SendMessage(handle, WM_APPCOMMAND, handle, APPCOMMAND_VOLUME_DOWN);
end;

procedure TForm4.Button6Click(Sender: TObject);
begin
  SendMessage(handle, WM_APPCOMMAND, handle, APPCOMMAND_VOLUME_MUTE);
end;

подробности тут http://stackoverflow.com/questions/13139181/how-to-programmatically-set-the-system-volume
Re[5]: Общая громкость звука
От: drpops  
Дата: 08.02.17 18:36
Оценка:
Здравствуйте, drpops, Вы писали:

D>Здравствуйте, VTT, Вы писали:


VTT>>Здравствуйте, drpops, Вы писали:


D>>>Здравствуйте, VTT, Вы писали:


VTT>>Вам скорее нужен интерфейс IAudioEndpointVolume,

VTT>>который можно получить вызвав метод Activate интерфейса IMMDevice,
VTT>>который можно получить вызвав метод GetDefaultAudioEndpoint интерфейса IMMDeviceEnumerator,
VTT>>который можно получить вызвав метод CoCreateInstance.
VTT>>Значения констант можно поискать рядом с объявлением нужного интерфейса в соответствующем заголовочном файле.
VTT>>Нужные заголовочные файлы обычно указываются на MSDN внизу страниц, в разделе Requirements.

D>Спасибо большое. Даже нашел портирование на делфи вот тут http://www.cyberforum.ru/delphi/thread430568.html

D>(если кому интересно, конечно) пока ковыряюсь, только сейчас руки дошли...

Все, разобрался, сделал рабочий код. Но есть интересные приколы...
Винду точно индусы писали
Ну или документацию
Отредактировано 08.02.2017 18:38 drpops . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.