很久没有做一些感兴趣的东西了,今天这个时候加晚班正好有点时间,研究了一下在windows下控制音量。用到了winmm,因为用的是wxWidgets做界面,所以需要在引用里加入libwinmm.a这个静态链接库。同样,如果是基于vc的开发,那么引用winmm.lib就是了。
主要用到了以下两个api提供的函数。
因此,在设置和显示音量时,我只需要直接调用就行了。另外加入了一个静音的效果。其实很简单,就是把当前音量设置为0就是了。
最后效果.
另外针对不同的设备类型,显示音量和设置音量自然应该不同,所以应该额外给一个设备类型的标志。
1: 附件里包括完整的工程文件,源代码,wxFormBuilder所设计的界面文件以及编译之后的可执行文件。因为wxWidgets的动态链接库太大,压 缩之后也有 2.5M,超过上传限制,有需要的可以搜索自行下载一个 基于wxWidgets-2.8.9的库就行了。
2:这个工程所使用的wxWidgets动态链接库名称.
wxmsw28u_gcc_ilcd.dll
3:CodeBlocks+wxWidgets-2.8.9下编译通过
主要用到了以下两个api提供的函数。
bool WINAPI SetVolume(
long dev,
long vol);
//设置设备的音量,dev=0主音量,1WAVE ,2MIDI ,3 LINE IN
unsigned WINAPI GetVolume( int dev); //得到设备的音量dev=0主音量,1WAVE ,2MIDI ,3 LINE IN
unsigned WINAPI GetVolume( int dev); //得到设备的音量dev=0主音量,1WAVE ,2MIDI ,3 LINE IN
因此,在设置和显示音量时,我只需要直接调用就行了。另外加入了一个静音的效果。其实很简单,就是把当前音量设置为0就是了。
//显示音量
void controlsoundvolumeDialog::ShowVolume()
{
//获得当前系统音量
unsigned int currentVolume=GetVolume(m_decType);
m_sliderVolume->SetValue(currentVolume);
//数字化显示音量
wxString volumeLabelString = wxString::Format(wxT( "%i"),currentVolume);
m_staticTextVolume->SetLabel(volumeLabelString);
}
//静音模式
void controlsoundvolumeDialog::IsMute( wxCommandEvent& event )
{
//判断是否选择静音
if (m_checkBoxMute->GetValue())
{
SetVolume(m_decType,0);
}
else
{
int volume=m_sliderVolume->GetValue();
SetVolume(m_decType,volume);
}
}
//改变音量
void controlsoundvolumeDialog::ChangeSoundVolume( wxScrollEvent& event )
{
int volume=m_sliderVolume->GetValue();
//设置音量,
SetVolume(m_decType,volume);
//数字化显示音量
wxString volumeLabelString = wxString::Format(wxT( "%i"),volume);
m_staticTextVolume->SetLabel(volumeLabelString);
}
void controlsoundvolumeDialog::ShowVolume()
{
//获得当前系统音量
unsigned int currentVolume=GetVolume(m_decType);
m_sliderVolume->SetValue(currentVolume);
//数字化显示音量
wxString volumeLabelString = wxString::Format(wxT( "%i"),currentVolume);
m_staticTextVolume->SetLabel(volumeLabelString);
}
//静音模式
void controlsoundvolumeDialog::IsMute( wxCommandEvent& event )
{
//判断是否选择静音
if (m_checkBoxMute->GetValue())
{
SetVolume(m_decType,0);
}
else
{
int volume=m_sliderVolume->GetValue();
SetVolume(m_decType,volume);
}
}
//改变音量
void controlsoundvolumeDialog::ChangeSoundVolume( wxScrollEvent& event )
{
int volume=m_sliderVolume->GetValue();
//设置音量,
SetVolume(m_decType,volume);
//数字化显示音量
wxString volumeLabelString = wxString::Format(wxT( "%i"),volume);
m_staticTextVolume->SetLabel(volumeLabelString);
}
最后效果.
另外针对不同的设备类型,显示音量和设置音量自然应该不同,所以应该额外给一个设备类型的标志。
//改变选择音量类型
void controlsoundvolumeDialog::ChangeVolumeType( wxCommandEvent& event )
{
int decType=m_choiceVolumeType->GetCurrentSelection();
switch (decType)
{
case 0:
m_decType=0;
break;
case 1:
m_decType=1;
break;
case 2:
m_decType=2;
break;
default:
m_decType=0;
break;
}
ShowVolume();
}
void controlsoundvolumeDialog::ChangeVolumeType( wxCommandEvent& event )
{
int decType=m_choiceVolumeType->GetCurrentSelection();
switch (decType)
{
case 0:
m_decType=0;
break;
case 1:
m_decType=1;
break;
case 2:
m_decType=2;
break;
default:
m_decType=0;
break;
}
ShowVolume();
}
1: 附件里包括完整的工程文件,源代码,wxFormBuilder所设计的界面文件以及编译之后的可执行文件。因为wxWidgets的动态链接库太大,压 缩之后也有 2.5M,超过上传限制,有需要的可以搜索自行下载一个 基于wxWidgets-2.8.9的库就行了。
2:这个工程所使用的wxWidgets动态链接库名称.
wxmsw28u_gcc_ilcd.dll
3:CodeBlocks+wxWidgets-2.8.9下编译通过