『原创』用C++开发WM应用系列(7)——查看内存、电量情况

用C++开发WM应用系列文章索引

引言:

  在经过了前期的铺垫后,相信各位对MFC下的开发应该是很熟悉了,之前我本来打算说说控件使用,发现其实很多书本已经说了,并且说的比我好哦,为了不误人子弟,哈哈,我们下面来看一些和设备相关性大的功能吧,比如今天讲的:获取设备内存状态和电量情况。

正文:

  在开始之前,我们需要学习两个api函数和它们的结构体:

  1、获取设备内存信息GlobalMemoryStatus微软的MSDN说的非常详细,包括与他一起使用的MEMORYSTATUS结构体也一同介绍了。只不过在使用之前,注意:MS说“这个GlobalMemoryStatus can return incorrect information. Use the GlobalMemoryStatusEx function instead.”,当然,在我们这次的学习中,并没有采纳MS的建议~汗!

  2、获取设备电量信息GetSystemPowerStatusEx,同样,我们可以在MSDN中查找到与他一起使用的SYSTEM_POWER_STATUS_EX结构体,也是非常的简单。

  下面,我们来看看,在MSDN的介绍中,提及:GetSystemPowerStatusEx会返回一个bool值,以表明方法是否调用成功:This function returns TRUE if successful; otherwise, it returns FALSE.

  而GetSystemPowerStatusEx的实例化方法中,有一个bool参数,它是用来指示该方法获取哪种电量信息,为True时,从设备驱动中获取最新信息,否则从缓存中获取可能过期几秒的信息:If this Boolean is set to TRUE, GetSystemPowerStatusEx gets the latest information from the device driver, otherwise it retrieves cached information that may be out-of-date by several seconds.

  反观GlobalMemoryStatus方法,它就很简单了,没有返回值,只有结构体参数,所以我们在此就不做过多介绍,不过关于MS的那句提示,我暂时还没有发现问题,希望大家遇到“错误”的案例,能分享一下自己的经验。

  在学习完如上两个函数之后,我们就开始实质的代码编写工作吧,首先,我们建立一个c++下的MFC智能设备应用程序项目,WM5平台,基于对话框,其他默认即可。

然后,我们的界面如下:

  一个Static Text控件(电量),一个Button按钮(GetBettery),为Static控件添加控件变量txtLife,OK!

  下面,由于我们要使用的这两个函数需要去引用库,所以,我们右键单击项目名称,打开属性窗口,在窗口中,我们按照如图的序号,点开,在附加依赖项中,输入“Coredll.lib”:

  点击,确定,OK!

  下面,我们为Button按钮添加事件处理程序:

 

Button代码
void CMFCPowerStatuDlg::OnBnClickedButton1()
{
SYSTEM_POWER_STATUS_EX spse;
//定义的电源结构体
MEMORYSTATUS mms;//定义的内存信息结构体

if(GetSystemPowerStatusEx(&spse,true))//如果调用成功,则执行下面的代码
{
CString betterLife;
betterLife.Format(L
"%d",spse.BatteryLifePercent);//这里只获取剩余电量
txtLife.SetWindowText(betterLife);
GlobalMemoryStatus(
&mms);//直接调用方法,获取内存信息

CString Meminfo;
Meminfo.Format(L
"Memory Load:%ld \n TotalPhys:%ld \n AvailPhys:%ld \n TotalVirtual:%ld \n AvailVirtual:%ld \n",mms.dwMemoryLoad,mms.dwTotalPhys/1024,mms.dwAvailPhys/1024,mms.dwTotalVirtual/1024,mms.dwAvailVirtual/1024);
AfxMessageBox(Meminfo);
}
else
{
AfxMessageBox(L
"Error");
}
}

 

  看吧,就这么简单。不过,在这里要补充一点的是,结构体中有BYTE型,也有DWORD型,BYTE型使用%d进行转换,DWORD型使用%s进行转化即可,那天我就是卡在这个小问题上!可见基础的重要性啊!

  下面是我在模拟器上执行的效果,可以对照一下,看看有没有成功!在这里要提一句,如何设置模拟器电量呢?很简单,点击模拟器的窗体菜单——》文件——》配置——》跳到外围设备选项卡,然后你就可以看到了~:>

这是我为模拟器设置的当前电量:69%

下面是模拟器内存情况:

下面是程序运行时的情况:

 

总结:

1、今天,我们了解了两个比较常用的函数以及其配套结构体的使用

2、我们因该注意一些小的细节问题,比如BYTE等类型和CString的转换(网上一搜一大把)

计划在下一次的博文中,研究一下深层次的问题~~~~有待发现啊~~~~

相关推荐文章:

http://www.cnblogs.com/procoder/archive/2009/04/01/1427187.html

posted @ 2010-03-09 14:07  Jack Fan  阅读(1572)  评论(6编辑  收藏  举报
TOP