zoukankan      html  css  js  c++  java
  • 『原创』用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

    作者:Jack Fan初学博闻
    出处:http://longqi293.cnblogs.com
    本博文欢迎大家浏览和转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,在『参考』的文章中,我会表明参考的文章来源,尊重他人版权。若您发现我侵犯了您的版权,请及时与我联系。

    知识共享许可协议
    本篇博文 by Jack Fan is licensed under a Creative Commons 署名-非商业性使用-相同方式共享 2.5 中国大陆 License.

    这是我的公众号,【代码只是副业】

  • 相关阅读:
    LG7124 [Ynoi2008] stcm【树分治,构造】
    美团杯 2021【杂题】
    UOJ455【UER #8】雪灾与外卖【反悔贪心,模拟费用流】
    js正则匹配正负小数
    iview table 自适应高度
    iview tree render 自定义右键菜单(解决部分场景下官网tree右键菜单bug)
    iTextSharp Image.ScaleToFit自适应缩放简述
    C# 从动态类型中获取集合
    Js自定义日期
    SVN代码统计工具(资源下载+使用命令)
  • 原文地址:https://www.cnblogs.com/longqi293/p/1681628.html
Copyright © 2011-2022 走看看