Частина тексту файла (без зображень, графіків і формул):
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
Національний університет «Львівська політехніка»
Кафедра «Електронні обчислювальні машини»
/
Лабораторна робота № 7
З дисципліни:
«Системне програмне забезпечення»
Тема: «Зміна плану живлення ПК »
Мета : Розробити програму яка зможе змінювати план живлення ПК.
Теоретична частина
Параметри живлення в 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);
Hashtable pow = new Hashtable();
string Active;
private void GetPowers()
{
RegistryKey Key = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Power\User\PowerSchemes");
string[] powers = Key.GetSubKeyNames();
Active = (string)Key.GetValue("ActivePowerScheme");
string Shema;
foreach (string str in powers)
{
Key = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Power\User\PowerSchemes\" + str);
Shema = (string)Key.GetValue("FriendlyName");
try
{
Shema = Shema.Remove(0, Shema.LastIndexOf(",") + 1);
}
catch { }
pow.Add(Shema, str);
}
}
private void Create_radio()
{
RadioButton[] rb = { radioButton1, radioButton2, radioButton3 };
int i = 0;
foreach (DictionaryEntry de in pow)
{
rb[i].Visible = true;
rb[i].Text = (string)de.Key;
if (Active == de.Value.ToString())
{
rb[i].Checked = true;
}
i++;
}
for (int j = 0; j < i - 1; j++)
{
int h = this.Height + 23;
this.Size = new Size(this.Width, h);
groupBox3.Height = groupBox3.Height + 23;
}
}
private void Form1_Load(object sender, EventArgs e)
{
GetPowers();
Create_radio();
}
private void radioButton3_CheckedChanged(object sender, EventArgs e)
{
ChangePow(radioButton3);
}
private void radioButton2_CheckedChanged(object sender, EventArgs e)
{
ChangePow(radioButton2);
}
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
ChangePow(radioButton1);
}
private void ChangePow(RadioButton rb)
{
Active = (string)pow[rb.Text];
ProcessStartInfo prc = new ProcessStartInfo("Powercfg", "-setactive " + Active);
prc.WindowStyle = ProcessWindowStyle.Hidden;
Process.Start(prc);
}
}
}
Результат виконання
Збалансований режим
Режим збереження енергії
Висновок: Я розробив програму яка змінює план живлення ПК.