C語言電池助手(代碼實例)

C語言電池助手

按照教材學習C語言一般都只涉及數據類型、指針、數組、鏈表等這樣一系列的基礎知識
但是在寒假裏出於興趣和強烈的好奇
筆者突發奇想想知道能否用C語言訪問系統的電池參數
由此筆者查閱資料以後嘗試寫了一個乞丐版的電池助手

時至暑假,筆者突然想起了這個遠古程序,決定把它收錄進自己博客中

代碼

#include <stdio.h>
#include <windows.h>
#include <conio.h>

void gotoxy(int x,int y)
//句柄操作:實現光標的移動;
{
    COORD pos;
    HANDLE hOutput;
    pos.X=x;
    pos.Y=y;
    hOutput=GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(hOutput,pos);
}

int main(void)
{
    SYSTEM_POWER_STATUS sps;        //定義訪問電池的結構體;
    GetSystemPowerStatus(&sps);     //讀取結構體指針的內容;
    system("color F0");
    system("mode con cols=40 lines=8");
    gotoxy(5,1);
    printf("是否連通電源:%s",sps.ACLineStatus==0?"否":"是");
    gotoxy(5,2);
    printf("電池百分比:%d%%",sps.BatteryLifePercent);
    gotoxy(5,3);
    switch(sps.BatteryFlag){
        case 0:
            printf("電池狀態:低電量");
            break;
        case 1:
            printf("電池狀態:高電量");
            break;
        case 4:
            printf("電池狀態:極低電量");
            break;
        case 8:
            printf("電池狀態:充電中");
            break;
        case 128:
            printf("未檢測到電池!");
            break;
        case 255:
            printf("無法讀取電池狀態!");
            break;
    }
    if(sps.ACLineStatus==0){
        int h,s;
        h=sps.BatteryLifeTime/3600;
        s=(sps.BatteryLifeTime-h*3600)/60;
        gotoxy(5,4);
        printf("電池剩餘使用時間:%d時%d分",h,s);
    }
    else{
        gotoxy(5,4);
        printf("電池剩餘使用時間:您已接通電源!");
    }
    system("pause");
    return 0;
}

其中gotoxy是對光標的移動
而核心代碼則是main函數中的
最最關鍵的則是由系統定義的結構體:

SYSTEM_POWER_STATUS sps;        //定義訪問電池的結構體;
GetSystemPowerStatus(&sps);     //讀取結構體指針的內容;

而後便是調用該結構體中的各項參數:

ACLineStatus			//是否接通電源
BatteryLifePercent		//電源百分比
BatteryFlag				//電池狀態
BatteryLifeTime			//電池預計使用時間

感想

到這裏可以發現
實現訪問和顯示電池參數不需要自己設計程序和算法
無非只是需要知道C語言中已定義好的結構體:
SYSTEM_POWER_STATUS
而筆者的這段代碼也無非只是可以實現一些最基礎的功能
僅供學習娛樂而已
其依舊是一個較爲基礎的控制檯程序

其實筆者甚至想在低電量(小於20%)時調用 Beep() 函數
然而 Beep() 的蜂鳴聲總有些莫名的魔性
筆者不得不放棄了這個想法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章