Частина тексту файла (без зображень, графіків і формул):
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
Національний університет «Львівська політехніка»
Кафедра «Електронні обчислювальні машини»
/
Лабораторна робота № 3
З дисципліни:
«Системне програмне забезпечення»
Тема: «Виведення інформації про стан батареї»
Мета : Навчитись виводити інформацію про стан батареї ПК.
Теоретична частина
За допомогою індикатора акумулятора можна активізувати інший план живлення. Хоча індикатор акумулятора зазвичай використовується в портативних ПК, він може також відображатися на екрані настільного комп’ютера, якщо він підключений до джерела безперебійного живлення (UPS) через USB, або до іншого короткотривалого акумуляторного пристрою.
Індикатор акумулятора розташований в області сповіщень на Windows панелі завдань. Індикатор акумулятора полегшує відстеження споживання електроенергії портативним ПК під час його використання.
Якщо навести мишу на піктограму акумулятора, можна побачити залишок його заряду у відсотках, а також план живлення, що використовується у Windows.
Індикатор акумулятора також показує, працює портативний ПК від електромережі чи від акумулятора. Коли рівень заряду акумулятора низький, індикатор відображає сповіщення над піктограмою акумулятора.
Завдання: створити просту програму яка буде показувати інформацію про стан батареї ПК.
Для виконання цього задання була написана сама програма для виводу інформації про стан батареї на мові С# і DLL бібліотека з описом функцій які також будуть використовуватись при виконані наступних лабораторних з курсу СПЗ.
Код DLL бібліотеки з описом функцій.
#include "brightness.h"
#include "gammaramp.h"
extern "C" __declspec(dllexport) char * GetPowerStatus()
{
SYSTEM_POWER_STATUS sps;
if (GetSystemPowerStatus(&sps))
{
switch (sps.ACLineStatus) // печатаем статус питания
{
case 0:
return "Відключено";
case 1:
return "Підключено";
case 255:
default:
return "Невідомо";
break;
}
}
return "Unknown";
}
extern "C" __declspec(dllexport) char * GetBatteryFlag()
{
SYSTEM_POWER_STATUS sps;
GetSystemPowerStatus(&sps);
switch (sps.BatteryFlag) // статус заряда
{
case 1:
return "Високий";
case 2:
return "Низький";
case 4:
return "Критичний";
case 8:
return "Заряджається";
case 128:
return "Батарея відсутня";
case 255:
default:
return "Невідомий";
}
}
extern "C" __declspec(dllexport) int GetBatteryPercent()
{
SYSTEM_POWER_STATUS sps;
GetSystemPowerStatus(&sps);
return (int)sps.BatteryLifePercent;
}
extern "C" __declspec(dllexport) int GetBatteryTime()
{
SYSTEM_POWER_STATUS sps;
GetSystemPowerStatus(&sps);
return sps.BatteryLifeTime;
}
extern "C" __declspec(dllexport) int GetFullBatteryTime()
{
SYSTEM_POWER_STATUS sps;
GetSystemPowerStatus(&sps);
return sps.BatteryFullLifeTime;
}
Код програми
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using Brightness;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using Microsoft.Win32;
using System.Collections;
using System.Security;
using System.Security.AccessControl;
using System.Security.Permissions;
using System.Diagnostics;
namespace Brightness
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
[DllImport("brightness_dll.dll", CharSet = CharSet.Ansi)]
public static extern string GetPowerStatus();
[DllImport("brightness_dll.dll", CharSet = CharSet.Ansi)]
public static extern string GetBatteryFlag();
[DllImport("brightness_dll.dll", CharSet = CharSet.Ansi)]
public static extern int GetBatteryPercent();
[DllImport("brightness_dll.dll", CharSet = CharSet.Ansi)]
public static extern int GetBatteryTime();
[DllImport("brightness_dll.dll", CharSet = CharSet.Ansi)]
public static extern int GetFullBatteryTime();
[DllImport("brightness_dll.dll", CharSet = CharSet.Ansi)]
public static extern void SetBrightness(int Brightness);
private void Form1_Load(object sender, EventArgs e)
{
label2.Text = GetPowerStatus();
label3.Text = GetBatteryFlag();
label4.Text = GetBatteryPercent().ToString() + "%";
label5.Text = GetBatteryTime().ToString();
int total = GetBatteryTime();
if (total == -1)
label5.Text = "Невідомо";
else
{
int s, m, h;
s = total % 60;
total = total / 60;
m = total % 60;
h = total / 60;
label5.Text = h.ToString() + ":" + m.ToString() + ":" + s.ToString();
}
}
private void timer1_Tick(object sender, EventArgs e)
{
label2.Text = GetPowerStatus();
label3.Text = GetBatteryFlag();
label4.Text = GetBatteryPercent().ToString() + "%";
label5.Text = GetBatteryTime().ToString();
int total = GetBatteryTime();
if (total == -1)
label5.Text = "Невідомо";
else
{
int s, m, h;
s = total % 60;
total = total / 60;
m = total % 60;
h = total / 60;
label5.Text = h.ToString() + ":" + m.ToString() + ":" + s.ToString();
}
}
}
}
Результат виконання
/
При підключеному живленні
/
При відключеному живленні
Висновок: Я навчився виводити інформації про стан батареї ПК.