wince5.0系统时间、音量及背光、触摸屏校正以及进程查看大集合 (转)

来源:互联网 发布:java游戏服务器框架 编辑:程序博客网 时间:2024/06/11 01:12

(Wince之路-阿肆@Mercury-51Wince 努力奋斗在WINCE的路上)

参考了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来定。
===================================================================
以上就是这整个程序组的参考代码希望给大家有所帮助

原创粉丝点击