『原創』用C++開發WM應用系列(7)——查看記憶體、電量情況

來源:互聯網
上載者:User

用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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.