⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 setvolumdlg.cpp

📁 wince 系统时间、音量及背光、触摸屏校正以及进程查看大集合r
💻 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 + -