Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.08.2011, 03:19   #1
pavellyba
Пользователь
 
Регистрация: 01.12.2010
Сообщений: 84
Злость Как узнать уровень громкости в Windows 7?

Есть кучу примеров когда узнается уровень громкости приложения. Но как узнать уровень громкости всей системы(Windows 7)?
pavellyba вне форума Ответить с цитированием
Старый 12.08.2011, 03:32   #2
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

IAudioEndpointVolume::GetMasterVolu meLevel

Пояснение от самого разработчика (и отдельная серия о контроле громкости в Vista+: раз, два, три).

В Delphi.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.

Последний раз редактировалось GunSmoker; 12.08.2011 в 03:35.
GunSmoker вне форума Ответить с цитированием
Старый 12.08.2011, 05:26   #3
pavellyba
Пользователь
 
Регистрация: 01.12.2010
Сообщений: 84
По умолчанию

Пытался разобраться, ни чего не понял. И у меня не открываются ссылки (раз, два, три)
pavellyba вне форума Ответить с цитированием
Старый 12.08.2011, 05:33   #4
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Первая же ссылка в гугле - готовый код в последнем посте. Только вместо SetMasterVolumeLevelScalar вызываете GetMasterVolumeLevel.

В чём проблема?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 12.08.2011, 05:42   #5
pavellyba
Пользователь
 
Регистрация: 01.12.2010
Сообщений: 84
По умолчанию

Код:
unit MMDevApi;

interface

uses
Windows, ActiveX, ComObj;

const
CLASS_IMMDeviceEnumerator : TGUID = '{BCDE0395-E52F-467C-8E3D-C4579291692E}';
IID_IMMDeviceEnumerator : TGUID = '{A95664D2-9614-4F35-A746-DE8DB63617E6}';
IID_IMMDevice : TGUID = '{D666063F-1587-4E43-81F1-B948E807363F}';
IID_IMMDeviceCollection : TGUID = '{0BD7A1BE-7A1A-44DB-8397-CC5392387B5E}';
IID_IAudioEndpointVolume : TGUID = '{5CDF2C82-841E-4546-9722-0CF74078229A}';
IID_IAudioMeterInformation : TGUID = '{C02216F6-8C67-4B5B-9D00-D008E73E0064}';
IID_IAudioEndpointVolumeCallback : TGUID = '{657804FA-D6AD-4496-8A60-352752AF4F89}';

DEVICE_STATE_ACTIVE = $00000001;
DEVICE_STATE_UNPLUGGED = $00000002;
DEVICE_STATE_NOTPRESENT = $00000004;
DEVICE_STATEMASK_ALL = $00000007;

type
EDataFlow = TOleEnum;

const
eRender = $00000000;
eCapture = $00000001;
eAll = $00000002;
EDataFlow_enum_count = $00000003;

type
ERole = TOleEnum;

const
eConsole = $00000000;
eMultimedia = $00000001;
eCommunications = $00000002;
ERole_enum_count = $00000003;

type
IAudioEndpointVolumeCallback = interface(IUnknown)
['{657804FA-D6AD-4496-8A60-352752AF4F89}']
end;

IAudioEndpointVolume = interface(IUnknown)
['{5CDF2C82-841E-4546-9722-0CF74078229A}']
function RegisterControlChangeNotify(AudioEndPtVol: IAudioEndpointVolumeCallback): Integer; stdcall;
function UnregisterControlChangeNotify(AudioEndPtVol: IAudioEndpointVolumeCallback): Integer; stdcall;
function GetChannelCount(out PInteger): Integer; stdcall;
function SetMasterVolumeLevel(fLevelDB: single; pguidEventContext: PGUID): Integer; stdcall;
function SetMasterVolumeLevelScalar(fLevelDB: single; pguidEventContext: PGUID): Integer; stdcall;
function GetMasterVolumeLevel(out fLevelDB: single): Integer; stdcall;
function GetMasterVolumeLevelScaler(out fLevelDB: single): Integer; stdcall;
function SetChannelVolumeLevel(nChannel: Integer; fLevelDB: double; pguidEventContext: PGUID): Integer; stdcall;
function SetChannelVolumeLevelScalar(nChannel: Integer; fLevelDB: double; pguidEventContext: PGUID): Integer; stdcall;
function GetChannelVolumeLevel(nChannel: Integer; out fLevelDB: double): Integer; stdcall;
function GetChannelVolumeLevelScalar(nChannel: Integer; out fLevel: double): Integer; stdcall;
function SetMute(bMute: Boolean; pguidEventContext: PGUID): Integer; stdcall;
function GetMute(out bMute: Boolean): Integer; stdcall;
function GetVolumeStepInfo(pnStep: Integer; out pnStepCount: Integer): Integer; stdcall;
function VolumeStepUp(pguidEventContext: PGUID): Integer; stdcall;
function VolumeStepDown(pguidEventContext: PGUID): Integer; stdcall;
function QueryHardwareSupport(out pdwHardwareSupportMask): Integer; stdcall;
function GetVolumeRange(out pflVolumeMindB: double; out pflVolumeMaxdB: double; out pflVolumeIncrementdB: double): Integer; stdcall;
end;

IAudioMeterInformation = interface(IUnknown)
['{C02216F6-8C67-4B5B-9D00-D008E73E0064}']
end;

IPropertyStore = interface(IUnknown)
end;

IMMDevice = interface(IUnknown)
['{D666063F-1587-4E43-81F1-B948E807363F}']
function Activate(const refId: TGUID;
dwClsCtx: DWORD;
pActivationParams: PInteger;
out pEndpointVolume: IAudioEndpointVolume): Hresult; stdCall;
function OpenPropertyStore(stgmAccess: DWORD; out ppProperties: IPropertyStore): Hresult; stdcall;
function GetId(out ppstrId: PLPWSTR): Hresult; stdcall;
function GetState(out State: Integer): Hresult; stdcall;
end;


IMMDeviceCollection = interface(IUnknown)
['{0BD7A1BE-7A1A-44DB-8397-CC5392387B5E}']
end;

IMMNotificationClient = interface(IUnknown)
['{7991EEC9-7E89-4D85-8390-6C703CEC60C0}']
end;

IMMDeviceEnumerator = interface(IUnknown)
['{A95664D2-9614-4F35-A746-DE8DB63617E6}']
function EnumAudioEndpoints(dataFlow: EDataFlow; deviceState: SYSUINT; DevCollection: IMMDeviceCollection): Hresult; stdcall;
function GetDefaultAudioEndpoint(EDF: SYSUINT; ER: SYSUINT; out Dev :IMMDevice ): Hresult; stdcall;
function GetDevice(pwstrId: pointer; out Dev: IMMDevice): HResult; stdcall;
function RegisterEndpointNotificationCallback(pClient: IMMNotificationClient): Hresult; stdcall;
end;

implementation

end.
Код:
uses ... ActiveX, MMDevApi, ...;

//...... other code

var
endpointVolume: IAudioEndpointVolume = nil;

procedure TForm1.FormCreate(Sender: TObject);
var
deviceEnumerator: IMMDeviceEnumerator;
defaultDevice: IMMDevice;
begin
CoCreateInstance(CLASS_IMMDeviceEnumerator, nil, CLSCTX_INPROC_SERVER, IID_IMMDeviceEnumerator, deviceEnumerator);
deviceEnumerator.GetDefaultAudioEndpoint(eRender, eConsole, defaultDevice);
defaultDevice.Activate(IID_IAudioEndpointVolume, CLSCTX_INPROC_SERVER, nil, endpointVolume);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
VolumeLevel: Single;
begin
if endpointVolume = nil then Exit;
VolumeLevel := 0.50;
endpointVolume.SetMasterVolumeLevelScalar(VolumeLevel, nil);
Caption := Format('%1.8f', [VolumeLevel])
end;

Последний раз редактировалось pavellyba; 12.08.2011 в 09:13.
pavellyba вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кто знает как реализовать уровень звука у медиа плеера? Virus25 Мультимедиа в Delphi 1 01.02.2010 02:30
Как повысить свой уровень? maladec Свободное общение 12 29.01.2010 19:17
Как узнать уровень заряда батареи, план электропитания, сменить плаН? TwiX Общие вопросы Delphi 5 03.10.2009 13:48
Узнать версию WINDOWS dimonbest Win Api 1 29.12.2008 12:07
Delphi 6 - Программа должна узнать уровень загруженности процессора Никки Общие вопросы Delphi 3 20.11.2007 19:40