|
안녕하세요.
아래코드는 이곳에 발취하여 사용하는 Code인데요 (볼륨 조절용)
Xp에서는 정상적으로 MasterVolum을 제어하는데 , OS가 Window7(vista)에서 서브 볼륨만 제어가 됩니다.
Windows7에서 프로그램으로 Master볼륨을 제어해야되는 어떻게 해야하는지요?
그리고 SendMessage를 이용하여 한번 해봤는데 이것도 안되네요 뭐가 문제일까요?
void __fastcall TForm1::Button1Click(TObject *Sender){
HWND hWnd = GetDesktopWindow();
if(hWnd)
{
SendMessage(hWnd, WM_KEYDOWN, VK_VOLUME_UP,0);
}
}
여러분의 많은 조언 부탁드립니다.
void SetSpeakerVolume(float fVolPercent)
{
HMIXER hmx;
mixerOpen(&hmx, 0, 0, 0, 0);
MIXERLINE mxl;
mxl.cbStruct = sizeof(mxl);
mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
mixerGetLineInfo((HMIXEROBJ)hmx, &mxl, MIXER_GETLINEINFOF_COMPONENTTYPE);
DWORD cConnections = mxl.cConnections;
for(DWORD j=0; j<cConnections; j++){
mxl.dwSource = j;
mixerGetLineInfo((HMIXEROBJ)hmx, &mxl, MIXER_GETLINEINFOF_DESTINATION);
if (MIXERLINE_COMPONENTTYPE_DST_SPEAKERS == mxl.dwComponentType)
break;
}
LPMIXERCONTROL pmxctrl = (LPMIXERCONTROL)malloc(sizeof (MIXERCONTROL));
MIXERLINECONTROLS mxlctrl = {sizeof mxlctrl, mxl.dwLineID, MIXERCONTROL_CONTROLTYPE_VOLUME, 1, sizeof (MIXERCONTROL), pmxctrl};
if(!mixerGetLineControls((HMIXEROBJ) hmx, &mxlctrl, MIXER_GETLINECONTROLSF_ONEBYTYPE))
{
DWORD cChannels = mxl.cChannels;
if (MIXERCONTROL_CONTROLF_UNIFORM & pmxctrl->fdwControl)
cChannels = 1;
LPMIXERCONTROLDETAILS_UNSIGNED pUnsigned = (LPMIXERCONTROLDETAILS_UNSIGNED)malloc(cChannels * sizeof (MIXERCONTROLDETAILS_UNSIGNED));
MIXERCONTROLDETAILS mxcd = {sizeof(mxcd), pmxctrl->dwControlID, cChannels, (HWND)0, sizeof (MIXERCONTROLDETAILS_UNSIGNED), (LPVOID) pUnsigned};
mixerGetControlDetails((HMIXEROBJ)hmx, &mxcd,MIXER_SETCONTROLDETAILSF_VALUE);
float fvoldist, fsetvol;
fvoldist = pmxctrl->Bounds.dwMaximum - pmxctrl->Bounds.dwMinimum;
fsetvol = fvoldist * (fVolPercent / 100.0);
DWORD newvol;
newvol = pmxctrl->Bounds.dwMinimum + (DWORD)fsetvol;
pUnsigned[0].dwValue = pUnsigned[cChannels - 1].dwValue = newvol;
mixerSetControlDetails((HMIXEROBJ)hmx, &mxcd,MIXER_SETCONTROLDETAILSF_VALUE);
free(pmxctrl);
free(pUnsigned);
}
else
free(pmxctrl);
mixerClose(hmx);
}
|