#include <windows.h>
#include <mmsystem.h>
#include <stdio.h>
HMIXER hMixer;
MIXERLINE ml;
MIXERLINECONTROLS mlc;
MIXERCONTROL mc;
MIXERCONTROLDETAILS mcd;
MIXERCONTROLDETAILS_UNSIGNED mcdu;
DWORD Volume;
MMRESULT Ret;
int main(int argc, char **argv)
{
/* mixerOpen(&hMixer, MIXER_OBJECTF_MIXER, NULL, 0, CALLBACK_WINDOW);
DWORD dw = GetLastError();
char txtt[32] = "";
char Tess[32] = "Code: ";
sprintf(txtt,"%d",dw);
strcat(Tess, txtt);
MessageBox(0, Tess, "Error!", MB_ICONERROR);*/
DWORD t = 0;
int i = 0;
while (true)
{
t = t+655;
i++;
ml.cbStruct = sizeof(ml);
ml.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
Ret = mixerGetLineInfo((HMIXEROBJ)hMixer, &ml, MIXER_GETLINEINFOF_COMPONENTTYPE);
if (Ret != MMSYSERR_NOERROR) return 0;
Ret = mixerGetLineInfo((HMIXEROBJ)hMixer, &ml, MIXER_GETLINEINFOF_COMPONENTTYPE);
if (Ret != MMSYSERR_NOERROR) return 0;
mlc.cbStruct = sizeof(mlc);
mlc.dwLineID = ml.dwLineID;
mlc.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;
mlc.cControls = 1;
mlc.cbmxctrl = sizeof(mc);
mlc.pamxctrl = &mc;
mc.cbStruct = sizeof(mc);
Ret = mixerGetLineControls((HMIXEROBJ)hMixer, &mlc, MIXER_GETLINECONTROLSF_ONEBYTYPE);
if (Ret != MMSYSERR_NOERROR) return 0;
mcdu.dwValue = t; // the volume is a number between 0 and 65535
mcd.cbStruct = sizeof(MIXERCONTROLDETAILS);
mcd.hwndOwner = 0;
mcd.dwControlID = mc.dwControlID;
mcd.paDetails = &mcdu;
mcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED);
mcd.cChannels = 0;
Ret = mixerSetControlDetails((HMIXEROBJ) hMixer,
&mcd, MIXER_SETCONTROLDETAILSF_VALUE);
mixerSetControlDetails((HMIXEROBJ)hMixer, &mcd, MIXER_SETCONTROLDETAILSF_VALUE);
PlaySound(TEXT("C:\\Windows\\winsxs\\x86_microsoft-windows-s..undthemes-landscape_31bf3856ad364e35_6.1.7600.16385_none_1e650d9135666d13\\Windows Battery Low.wav"), NULL, SND_FILENAME | SND_ASYNC);
mixerClose(hMixer);
printf("%d\n",i);
Sleep(2000);
if (i==100)
{
break;
}
}
system("PAUSE");
return EXIT_SUCCESS;
}
Работа с микшером
Вот нарыл код он изменяет уровень звука для "себе"
есть еще вопрос как правильно пользоваться mixerOpen он отрабатывает только раз и программа закрывается. GetLastError возращяет 0
Код:
Код:
mixerOpen(&hMixer, 0, NULL, 0, MIXER_OBJECTF_MIXER);
А у тебя даже параметры местами попутаны были.
у меня такой вопрос можно как то указать программу для которой нужно изменить звук?
хотелось бы и на WinXP, но в основном Win 7/Vista
Цитата: TDK
хотелось бы и на WinXP, но в основном Win 7/Vista
На XP нет WASAPI вроде. Только через winmm.dll, но глобально,
для всех приложений сразу. А для висты и w7 этот интерфейс устаревший.
Кстати, для XP есть ещё более простой способ управления громкостью --
через функции auxGetVolume() и auxSetVolume().
Но так только Master Volume регулируется.
Подведя итог всему вышенаписанному–реализуйте разный функционал в зависимости от версии ОС