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() 的蜂鸣声总有些莫名的魔性
笔者不得不放弃了这个想法