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() 的蜂鳴聲總有些莫名的魔性
筆者不得不放棄了這個想法