wince5.0系统时间、音量及背光、触摸屏校正以及进程查看大集合
参考了Norains写的一些东西。然后参考了网上一些大侠们写的东西。总结了一个比较零碎的东西。整个程序由三部分。进程查看器,系统时间修改器,音量及背光修改器。进程查看器主要是查看当前运行的EXE文件。
同时有触摸校验按钮进入系统触摸屏校验界面。
系统时间修改按钮导出系统时间修改器
音量修改按钮导出音量修改,背光修改界面。
=====================================================================
进程查看可以参考付林林写的东西。不过我现在还是不知道如何产看EXE所调用了的DLL。这个还得研究。
=====================================================================
先介绍如何调用WINCE5.0系统的触摸校验
1.引用
#include
pwinuser.h主要是这个文件。每个人路进不一样可能位置不一样。只要找到这个文件的位置引用就好了
2. TouchCalibrate();//在按钮里调用这个函数。触摸矫正就出来了。。。汗。。很简单。
======================================================================
再次是介绍如何调用外部EXE。
1.这个使用的原因是因为音量控制,时间控制我都做成外部的小程序模块,发现一个很严重的问题就是如果做成子窗体的话如果修改音量还好,修改时间会报系统内存溢出之类的致命错误。所以还是做了外部小程序。
2.用的函数如下:
CreateProcess( szMapPath, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,NULL )
这里要重点说一下。。。。
http://msdn.microsoft.com/en-us/library/ms682425.aspx这个是对的。但是参考范围是2000,XP系统。 MSDN上的例子不是WINCE下的。第二个参数是路径,而WINCE下的是第一个参数是路进。这个地方以前研究了很久才发现。这个地方一定要小心。
szMapPath这个是你的外部程序路径了。
还有。。。 wince下的路径都是用“//”的哦。。。。
=====================================================================
接下来是系统时间修改器
1.一共六个输入控件,年月日时分秒。
2.6个微调控件,Spin控件
3.初始化的时候定好初始设定和微调设定:
//设置 年 微调按钮
CSpinButtonCtrl *pYEAR = (CSpinButtonCtrl*)GetDlgItem(IDC_SPIN1);
ASSERT(pYEAR!=NULL);
//设置伙伴窗口
//int str=2007;
pYEAR->SetBuddy(GetDlgItem(IDC_YEAR));
pYEAR->SetRange(2008,2099);
pYEAR->SetPos(2008);
m_CYear.SetWindowText(_T("2008"));
//设置 月 微调按钮
CSpinButtonCtrl *pMONTH = (CSpinButtonCtrl*)GetDlgItem(IDC_SPIN2);
ASSERT(pMONTH!=NULL);
//设置伙伴窗口
pMONTH->SetBuddy(GetDlgItem(IDC_MONTH));
pMONTH->SetRange(1,12);
pMONTH->SetPos(1);
m_CMonth.SetWindowText(_T("8"));
//设置 日 微调按钮
CSpinButtonCtrl *pDAY = (CSpinButtonCtrl*)GetDlgItem(IDC_SPIN3);
ASSERT(pDAY!=NULL);
//设置伙伴窗口
pDAY->SetBuddy(GetDlgItem(IDC_DAY));
pDAY->SetRange(1,31);
pDAY->SetPos(1);
m_CDay.SetWindowText(_T("8"));
//设置 小时 微调按钮
CSpinButtonCtrl *pHOUR = (CSpinButtonCtrl*)GetDlgItem(IDC_SPIN4);
ASSERT(pHOUR!=NULL);
//设置伙伴窗口
//int str=2007;
pHOUR->SetBuddy(GetDlgItem(IDC_HOUR));
pHOUR->SetRange(0,23);
pHOUR->SetPos(12);
m_CHour.SetWindowText(_T("8"));
//设置 分钟 微调按钮
CSpinButtonCtrl *pMINUTE = (CSpinButtonCtrl*)GetDlgItem(IDC_SPIN5);
ASSERT(pMINUTE!=NULL);
//设置伙伴窗口
pMINUTE->SetBuddy(GetDlgItem(IDC_MINUTE));
pMINUTE->SetRange(0,59);
pMINUTE->SetPos(0);
m_CMinute.SetWindowText(_T("8"));
//设置 秒 微调按钮
CSpinButtonCtrl *pSECOND = (CSpinButtonCtrl*)GetDlgItem(IDC_SPIN6);
ASSERT(pSECOND!=NULL);
//设置伙伴窗口
pSECOND->SetBuddy(GetDlgItem(IDC_SECOND));
pSECOND->SetRange(0,59);
pSECOND->SetPos(0);
m_CSecond.SetWindowText(_T("8"));
4.设定时间
UpdateData(TRUE);
SYSTEMTIME sysTime;
sysTime.wYear =m_Year;
sysTime.wMonth =m_Month;
sysTime.wDay = m_Day;
sysTime.wHour =m_Hour;
sysTime.wMinute =m_Minute;
sysTime.wSecond =m_Second;
SetLocalTime(&sysTime);
UpdateData(FALSE);
5.完成
接下来是音量控制,背光控制,任务栏隐藏,
1.隐藏任务栏,先定义一个全局变量控制。
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;
}
}
2.控制屏幕点击音。这个有点麻烦,同样设定一个全局变量控制下。
//点击屏幕声 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;
}
以 前参考Norains的修改注册表类。其实有点麻烦。直接用RegSetValueEx去修改还更直接。CReg类也是调用了这个东西。而且要区分 DWORD和STRING型。在这两个类新上我也话了不少时间。不同的类型控制效果是不一样的。如果串了类新可能会失效。就是 REG_DWORD这个东西。
======================================================================
3.音量控制。这个同样是修改注册表。两个按钮。+/-,加减的步进值都是0x33333333。
if (m_vol != 0x0)
{
m_vol = m_vol - 0x33333333;
}
//SetVolume(m_vol);
waveOutSetVolume(0,m_vol);
m_volshow = m_vol;
this->UpdateData(FALSE);
减法
if (m_vol != 0xFFFFFFFF)
{
m_vol = m_vol + 0x33333333;
}
//SetVolume(m_vol);
m_volshow = m_vol;
waveOutSetVolume(0,m_vol);
this->UpdateData(FALSE);
加法
这里有个问题是忘记了获取系统当前音量。这个大家自己加下。就是要获取下注册表里当前音量的值赋值给m_vol就好了
====================================================================
背光设置。这里要用到修改注册表和用背光流驱动两个方向去修改
1.代码如下:
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);
}
加背光
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);
}
减背光
BKL1这个可以按照你的自己注册的BKL来定。
===================================================================
以上就是这整个程序组的参考代码希望给大家有所帮助