📄 setvolumdlg.cpp
字号:
// SetVolumDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "SetVolum.h"
#include "SetVolumDlg.h"
//////////////////////////////////////////////////////////////////////////////////////////
#ifndef CTL_CODE
#define CTL_CODE( DeviceType, Function, Method, Access ) (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
#endif
#define FILE_DEVICE_UNKNOWN 0x00000022
#define METHOD_BUFFERED 0
#define FILE_ANY_ACCESS 0
#define IOCTL_BACKLIGHT_SET CTL_CODE(FILE_DEVICE_UNKNOWN, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_BACKLIGHT_GET CTL_CODE(FILE_DEVICE_UNKNOWN, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
//////////////////////////////////////////////////////////////////////////////////////////
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CSetVolumDlg 对话框
//======================================================================
//Macro define
//Registry KEY
#define BASE_KEY HKEY_CURRENT_USER
#define SUB_KEY TEXT("ControlPanel\Volume")
#define VALUE_VOLUME TEXT("Volume")
#define VALUE_SCREEN TEXT("Screen")
#define VALUE_KEY TEXT("Key")
#define VALUE_MUTE TEXT("Mute")
//For the screen tap and the key click
#define VOL_VALUE_MUTE 0
#define VOL_VALUE_LOUD 65538
#define VOL_VALUE_SOFT 1
//The bit for sound
#define BIT_EVENT 0x4
#define BIT_APPLICATION 0x2
#define BIT_NOTIFICATION 0x1
//=====================================================================
DWORD m_vol = 0x00000000;
BOOL m_ScreenClick = FALSE;
BOOL m_keyClick = FALSE;
BOOL m_HideTaskBar = FALSE;
HANDLE hStr = NULL;
int Lumin ; //m_ctrlSlider1.GetPos();
CSetVolumDlg::CSetVolumDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSetVolumDlg::IDD, pParent)
, m_volshow(0)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CSetVolumDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_ShowVol, m_volshow);
}
BEGIN_MESSAGE_MAP(CSetVolumDlg, CDialog)
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
ON_WM_SIZE()
#endif
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_BUTTON1, &CSetVolumDlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON2, &CSetVolumDlg::OnBnClickedButton2)
ON_BN_CLICKED(IDC_BUTTON3, &CSetVolumDlg::OnBnClickedButton3)
ON_BN_CLICKED(IDC_BUTTON4, &CSetVolumDlg::OnBnClickedButton4)
ON_BN_CLICKED(IDC_BUTTON8, &CSetVolumDlg::OnBnClickedButton8)
ON_BN_CLICKED(IDC_BUTTON7, &CSetVolumDlg::OnBnClickedButton7)
ON_BN_CLICKED(IDC_BUTTON6, &CSetVolumDlg::OnBnClickedButton6)
ON_BN_CLICKED(IDC_BUTTON5, &CSetVolumDlg::OnBnClickedButton5)
ON_BN_CLICKED(IDC_BUTTON9, &CSetVolumDlg::OnBnClickedButton9)
ON_BN_CLICKED(IDC_BUTTON10, &CSetVolumDlg::OnBnClickedButton10)
END_MESSAGE_MAP()
// CSetVolumDlg 消息处理程序
BOOL CSetVolumDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
void CSetVolumDlg::OnSize(UINT /*nType*/, int /*cx*/, int /*cy*/)
{
if (AfxIsDRAEnabled())
{
DRA::RelayoutDialog(
AfxGetResourceHandle(),
this->m_hWnd,
DRA::GetDisplayMode() != DRA::Portrait ?
MAKEINTRESOURCE(IDD_SETVOLUM_DIALOG_WIDE) :
MAKEINTRESOURCE(IDD_SETVOLUM_DIALOG));
}
}
#endif
bool CSetVolumDlg::SetVolumeScreenTap(VolumeModeType volMode)
{
DWORD dwVol = 0;
switch(volMode)
{
case VOL_SOFT:
dwVol = VOL_VALUE_SOFT;
break;
case VOL_LOUD:
dwVol = VOL_VALUE_LOUD;
break;
case VOL_MUTE:
dwVol = VOL_VALUE_MUTE;
break;
}
if(m_Reg.IsOK() != TRUE)
{
return FALSE;
}
m_Reg.SetDW(VALUE_SCREEN,dwVol);
return Apply();
}
bool CSetVolumDlg::SetVolumeKeyClick(VolumeModeType volMode)
{
DWORD dwVol = 0;
switch(volMode)
{
case VOL_SOFT:
dwVol = VOL_VALUE_SOFT;
break;
case VOL_LOUD:
dwVol = VOL_VALUE_LOUD;
break;
case VOL_MUTE:
dwVol = VOL_VALUE_MUTE;
break;
}
if(m_Reg.IsOK() != TRUE)
{
return FALSE;
}
m_Reg.SetDW(VALUE_KEY,dwVol);
return Apply();
}
bool CSetVolumDlg::EnableSoundNotification(BOOL bEnable)
{
if(m_Reg.IsOK() != TRUE)
{
return FALSE;
}
DWORD dwVal = m_Reg.GetValueDW(VALUE_MUTE,0);
if(bEnable == TRUE)
{
dwVal |= BIT_NOTIFICATION;
}
else
{
dwVal &= ~BIT_NOTIFICATION;
}
m_Reg.SetDW(VALUE_MUTE,dwVal);
return Apply();
}
bool CSetVolumDlg::EnableSoundApplication(BOOL bEnable)
{
if(m_Reg.IsOK() != TRUE)
{
return FALSE;
}
DWORD dwVal = m_Reg.GetValueDW(VALUE_MUTE,0);
if(bEnable == TRUE)
{
dwVal |= BIT_APPLICATION;
}
else
{
dwVal &= ~BIT_APPLICATION;
}
m_Reg.SetDW(VALUE_MUTE,dwVal);
return Apply();
}
bool CSetVolumDlg::EnableSoundEvent(BOOL bEnable)
{
if(m_Reg.IsOK() != TRUE)
{
return FALSE;
}
DWORD dwVal = m_Reg.GetValueDW(VALUE_MUTE,0);
if(bEnable == TRUE)
{
dwVal |= BIT_EVENT;
}
else
{
dwVal &= ~BIT_EVENT;
}
m_Reg.SetDW(VALUE_MUTE,dwVal);
return Apply();
}
bool CSetVolumDlg::SetVolume(DWORD dwVol)
{
if(dwVol < MIN_VOLUME || dwVol > MAX_VOLUME)
{
return FALSE;
}
m_Reg.SetDW(VALUE_VOLUME,dwVol);
return Apply();
}
//////////////////////////////////////////////////////////////////
//Name:Apply
//Description:将信息写入注册表
//Input:无
//Output:True,False
//Author:Mercury Xu
//Data: 2008-08-14
//////////////////////////////////////////////////////////////////
bool CSetVolumDlg::Apply(void)
{
typedef void (WINAPI *DLL_AUDIOUPDATEFROMREGISTRY)();
DLL_AUDIOUPDATEFROMREGISTRY Dll_AudioUpdateFromRegistry = NULL;
HINSTANCE hCoreDll = LoadLibrary(TEXT("coredll.dll"));
if (hCoreDll)
{
Dll_AudioUpdateFromRegistry = (DLL_AUDIOUPDATEFROMREGISTRY)GetProcAddress(hCoreDll, _T("AudioUpdateFromRegistry"));
if (Dll_AudioUpdateFromRegistry)
{
(Dll_AudioUpdateFromRegistry)();
}
else
{
return FALSE;
}
FreeLibrary(hCoreDll);
}
else
{
return FALSE;
}
return TRUE;
}
//////////////////////////////////////////////////////////////////
//Name:OnBnClickedButton1
//Description:控制音量增加
//Input:无
//Output:无
//Author:Mercury Xu
//Data: 2008-08-14
//////////////////////////////////////////////////////////////////
void CSetVolumDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
if (m_vol != 0xFFFFFFFF)
{
m_vol = m_vol + 0x33333333;
}
//SetVolume(m_vol);
m_volshow = m_vol;
waveOutSetVolume(0,m_vol);
this->UpdateData(FALSE);
}
//////////////////////////////////////////////////////////////////
//Name:OnBnClickedButton2
//Description:控制音量减小
//Input:无
//Output:无
//Author:Mercury Xu
//Data: 2008-08-14
//////////////////////////////////////////////////////////////////
void CSetVolumDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
if (m_vol != 0x0)
{
m_vol = m_vol - 0x33333333;
}
//SetVolume(m_vol);
waveOutSetVolume(0,m_vol);
m_volshow = m_vol;
this->UpdateData(FALSE);
}
//////////////////////////////////////////////////////////////////
//Name:OnBnClickedButton3
//Description:无
//Input:无
//Output:无
//Author:Mercury Xu
//Data: 2008-08-14
//////////////////////////////////////////////////////////////////
void CSetVolumDlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
::AfxMessageBox(_T("This button for test!Not include function."));
}
//////////////////////////////////////////////////////////////////
//Name:OnBnClickedButton4
//Description:无
//Input:无
//Output:无
//Author:Mercury Xu
//Data: 2008-08-14
//////////////////////////////////////////////////////////////////
void CSetVolumDlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
::AfxMessageBox(_T("This button for test!Not include function."));
}
//////////////////////////////////////////////////////////////////
//Name:OnBnClickedButton8
//Description:无
//Input:无
//Output:无
//Author:Mercury Xu
//Data: 2008-08-14
//////////////////////////////////////////////////////////////////
void CSetVolumDlg::OnBnClickedButton8()
{
// TODO: 在此添加控件通知处理程序代码
::AfxMessageBox(_T("This button for test!Not include function."));
}
//////////////////////////////////////////////////////////////////
//Name:OnBnClickedButton8
//Description:设置按键音
//Input:无
//Output:无
//Author:Mercury Xu
//Data: 2008-08-14
//////////////////////////////////////////////////////////////////
void CSetVolumDlg::OnBnClickedButton7()
{
// TODO: 在此添加控件通知处理程序代码
//点击屏幕声 Screen 0:无声 1:柔和 65538:洪亮
HKEY m_hKey;
LPCTSTR Screen=_T("Screen");
LPCTSTR son_Key=_T("ControlPanel\\Volume\\");
DWORD ScreenNumber = 0;
DWORD ReturnValue=RegOpenKeyEx(HKEY_CURRENT_USER,son_Key,0,0,&m_hKey);
//写注册表修改按键音
if (FALSE == m_ScreenClick)
{
if(ReturnValue==ERROR_SUCCESS)
{
DWORD SetValue=RegSetValueEx(m_hKey,Screen,0,REG_DWORD,(LPBYTE)&ScreenNumber,sizeof(DWORD));
//送按键音值,使按键音失效
}
RegCloseKey(m_hKey);
Apply();
m_ScreenClick = TRUE;
}
else
{
if(ReturnValue==ERROR_SUCCESS)
{
DWORD ScreenNumber = 1;
DWORD SetValue=RegSetValueEx(m_hKey,Screen,0,REG_DWORD,(LPBYTE)&ScreenNumber,sizeof(DWORD));
//送按键音值,使按键音有效
}
RegCloseKey(m_hKey);
Apply();
m_ScreenClick = FALSE;
}
}
//////////////////////////////////////////////////////////////////
//Name:OnBnClickedButton6
//Description:设置按键音
//Input:无
//Output:无
//Author:Mercury Xu
//Data: 2008-08-14
//////////////////////////////////////////////////////////////////
void CSetVolumDlg::OnBnClickedButton6()
{
// TODO: 在此添加控件通知处理程序代码
HKEY m_hKey;
LPCTSTR Screen=_T("Key");
DWORD ScreenNumber = 0;
LPCTSTR son_Key=_T("ControlPanel\\Volume\\");
DWORD ReturnValue=RegOpenKeyEx(HKEY_CURRENT_USER,son_Key,0,0,&m_hKey);
if (FALSE == m_keyClick)
{
if(ReturnValue==ERROR_SUCCESS)
{
DWORD SetValue=RegSetValueEx(m_hKey,Screen,0,REG_DWORD,(LPBYTE)&ScreenNumber,sizeof(DWORD));
}
RegCloseKey(m_hKey);
Apply();
m_keyClick = TRUE;
}
else
{
if(ReturnValue==ERROR_SUCCESS)
{
DWORD ScreenNumber = 48;
DWORD SetValue=RegSetValueEx(m_hKey,Screen,0,REG_DWORD,(LPBYTE)&ScreenNumber,sizeof(DWORD));
}
RegCloseKey(m_hKey);
Apply();
m_keyClick = FALSE;
}
}
//////////////////////////////////////////////////////////////////
//Name:OnBnClickedButton5
//Description:隐藏wince任务栏
//Input:无
//Output:无
//Author:Mercury Xu
//Data: 2008-08-14
//////////////////////////////////////////////////////////////////
void CSetVolumDlg::OnBnClickedButton5()
{
// TODO: 在此添加控件通知处理程序代码
CWnd * hwndTaskBar = FindWindow(TEXT("HHTaskBar"), NULL);
//获取wince任务栏句柄
if (m_HideTaskBar == FALSE)
{
if(hwndTaskBar)
{
hwndTaskBar->EnableWindow(FALSE);
//窗体失效
hwndTaskBar->ShowWindow(SW_HIDE);
//窗体隐藏
m_HideTaskBar = TRUE;
}
}
else
{
if(hwndTaskBar)
{
hwndTaskBar->EnableWindow(TRUE);
//窗体有效
hwndTaskBar->ShowWindow(SW_SHOW);
//窗体显示
m_HideTaskBar = FALSE;
}
}
}
//////////////////////////////////////////////////////////////////
//Name:OnBnClickedButton5
//Description:设置背光亮度
//Input:无
//Output:无
//Author:Mercury Xu
//Data: 2008-08-14
//////////////////////////////////////////////////////////////////
void CSetVolumDlg::OnBnClickedButton9()
{
// TODO: 在此添加控件通知处理程序代码
HKEY hKey;
DWORD dwType=0;
DWORD dwState=Lumin;
hStr = CreateFile(_T("BKL1:"),GENERIC_READ| GENERIC_WRITE,NULL,NULL,OPEN_EXISTING,NULL,NULL);
//读取底层驱动,通过底层驱动用流式文件形式修改背光
if (DeviceIoControl(hStr,IOCTL_BACKLIGHT_GET,NULL,NULL,&Lumin,sizeof(Lumin),NULL,NULL))
{
++Lumin;
// ::AfxMessageBox(Lumin);
}
if((Lumin>0)&&(Lumin<6))
{
if (DeviceIoControl(hStr,IOCTL_BACKLIGHT_SET,&Lumin,sizeof(Lumin),NULL,0,NULL,NULL))
{
// ::AfxMessageBox(_T("set ok!"));
}
if(ERROR_SUCCESS==RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("ControlPanel\\Backlight\\"),0,0,&hKey))
{
RegSetValueEx(hKey, TEXT("BacklightCurrentLevel"),0,REG_DWORD,(BYTE*)&dwState,sizeof(DWORD));
}
Apply();
HANDLE hBL=CreateEvent(NULL,FALSE,FALSE,TEXT("BackLightChangeEvent"));
if(hBL)
{
SetEvent(hBL);
CloseHandle(hBL);
}
RegCloseKey(hKey);
}
}
void CSetVolumDlg::OnBnClickedButton10()
{
// TODO: 在此添加控件通知处理程序代码
HKEY hKey;
DWORD dwType=0;
DWORD dwState=Lumin;
hStr = CreateFile(_T("BKL1:"),GENERIC_READ| GENERIC_WRITE,NULL,NULL,OPEN_EXISTING,NULL,NULL);
//读取底层驱动,通过底层驱动用流式文件形式修改背光
if (DeviceIoControl(hStr,IOCTL_BACKLIGHT_GET,NULL,0,&Lumin,sizeof(Lumin),NULL,NULL))
{
--Lumin;
// ::AfxMessageBox(Lumin);
}
if((Lumin>0)&&(Lumin<6))
{
if (DeviceIoControl(hStr,IOCTL_BACKLIGHT_SET,&Lumin,sizeof(Lumin),NULL,0,NULL,NULL))
{
// ::AfxMessageBox(_T("set ok!"));
}
if(ERROR_SUCCESS==RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("ControlPanel\\Backlight\\"),0,0,&hKey))
{
RegSetValueEx(hKey, TEXT("BacklightCurrentLevel"),0,REG_DWORD,(BYTE*)&Lumin,sizeof(DWORD));
}
Apply();
HANDLE hBL=CreateEvent(NULL,FALSE,FALSE,TEXT("BackLightChangeEvent"));
if(hBL)
{
SetEvent(hBL);
CloseHandle(hBL);
}
RegCloseKey(hKey);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -