Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
Мне требуется посредством Delphi управлять виндовым «регулятором громкости», подскажите как реализуется, пожалуйста. 20.07.04 12:47
Автор: !? <!?> Статус: Member
|
|
|
сорри но на делфи переводить не буду Ж) 20.07.04 13:27
Автор: Killer{R} <Dmitry> Статус: Elderman
|
//---------------------------------------------------------------------------
#include "windows.h"
#include "mmsystem.h"
#pragma hdrstop
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
void __fastcall OpenAudioMixer(HMIXER &hMixer, DWORD &id, DWORD dwComponentType)
{
MMRESULT rc; // Return code.
MIXERCONTROL mxc; // Holds the mixer control data.
MIXERLINE mxl; // Holds the mixer line data.
MIXERLINECONTROLS mxlc; // Obtains the mixer control.
rc = mixerOpen(&hMixer, 0,0,0,0);
if (MMSYSERR_NOERROR == rc) {
// Couldn't open the mixer.
}
// Initialize MIXERLINE structure.
ZeroMemory(&mxl,sizeof(mxl));
mxl.cbStruct = sizeof(mxl);
mxl.dwComponentType = dwComponentType;
rc = mixerGetLineInfo((HMIXEROBJ)hMixer, &mxl,
MIXER_GETLINEINFOF_COMPONENTTYPE);
if (MMSYSERR_NOERROR == rc) {
// Couldn't get the mixer line.
}
// Get the control.
ZeroMemory(&mxlc, sizeof(mxlc));
mxlc.cbStruct = sizeof(mxlc);
mxlc.dwLineID = mxl.dwLineID;
mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;
mxlc.cControls = 1;
mxlc.cbmxctrl = sizeof(mxc);
mxlc.pamxctrl = &mxc;
ZeroMemory(&mxc, sizeof(mxc));
mxc.cbStruct = sizeof(mxc);
rc = mixerGetLineControls((HMIXEROBJ)hMixer,&mxlc,
MIXER_GETLINECONTROLSF_ONEBYTYPE);
if (MMSYSERR_NOERROR == rc) {
// Couldn't get the control. MIXERR_INVALCONTROL
}
id = mxc.dwControlID;
}
DWORD __fastcall GetVolume(HMIXER hMixer, DWORD id)
{
MMRESULT rc; // Return code.
MIXERCONTROLDETAILS mxcd; // Gets the control values.
MIXERCONTROLDETAILS_SIGNED volStruct[2]; // Gets the control values.
ZeroMemory(&mxcd, sizeof(mxcd));
mxcd.cbStruct = sizeof(mxcd);
mxcd.cbDetails = sizeof(volStruct);
mxcd.dwControlID = id;
mxcd.paDetails = &volStruct;
mxcd.cChannels = 2;
volStruct[0].lValue=0;
volStruct[1].lValue=0;
rc = mixerGetControlDetails((HMIXEROBJ)hMixer, &mxcd, MIXER_GETCONTROLDETAILSF_VALUE);
if (MMSYSERR_NOERROR == rc) {
return MAKELONG(volStruct[0].lValue, volStruct[1].lValue);
}
return -1;
}
int __fastcall SetVolume(HMIXER hMixer, DWORD id, DWORD vol)
{
MMRESULT rc; // Return code.
MIXERCONTROLDETAILS mxcd; // Gets the control values.
MIXERCONTROLDETAILS_SIGNED volStruct[2]; // Gets the control values.
ZeroMemory(&mxcd, sizeof(mxcd));
mxcd.cbStruct = sizeof(mxcd);
mxcd.cbDetails = sizeof(volStruct);
mxcd.dwControlID = id;
mxcd.paDetails = &volStruct;
mxcd.cChannels = 2;
volStruct[0].lValue=LOWORD(vol);
volStruct[1].lValue=HIWORD(vol);
rc = mixerSetControlDetails((HMIXEROBJ)hMixer, &mxcd, MIXER_SETCONTROLDETAILSF_VALUE);
if (MMSYSERR_NOERROR == rc) {
return 0;
}
return -1;
}
int __fastcall changevolume(int delta)
{
int ret=0;
HMIXER hMix = NULL;
DWORD id;
OpenAudioMixer(hMix, id, MIXERLINE_COMPONENTTYPE_DST_SPEAKERS);
if(hMix)
{
DWORD vol=GetVolume(hMix, id);
int vol1=(vol&0xffff);
int vol2=((vol>>16)&0xffff);
vol1+=delta;vol2+=delta;
if(vol1<0)vol1=0;else
if(vol1>65535)vol1=65535;
if(vol2<0)vol2=0;else
if(vol2>65535)vol2=65535;
ret=(vol1+vol2)>>1;
vol=vol2;vol=(vol<<16)|vol1;
SetVolume(hMix, id, vol);
mixerClose(hMix);
}
return ret;
}
|
| |
попытаюсь.. 20.07.04 13:33
Автор: !? <!?> Статус: Member
|
|
|
|