Утиліта моніторингу та контролю енергоспоживанням портативних комп’ютерів

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2011
Тип роботи:
Курсова робота
Предмет:
Системне програмне забезпечення

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ НУ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» Кафедра ЕОМ КУРСОВА РОБОТА з предмету “ Системне програмне забезпечення ” на тему: “Утиліта моніторингу та контролю енергоспоживанням портативних комп’ютерів” Львів 2011 АНОТАЦІЯ В курсовій роботі була розроблена програма «Утиліта моніторингу та контролю енергоспоживанням портативних комп’ютерів», вона дозволяє переглядати стан батареї, контролювати яскравість екрану, виводи інформацію про план електроживлення і змінювати його. Програма визначає чи підключений зарядний пристрій, скільки часу залишилось до повної розрядки батареї . Програма була розроблена за допомогою Visual Studio 2010 і працює на базі платформи .NET з використанням WinApi функцій, а також використовує бібліотеку написану на С++. ЗМІСТ Завдання на курсову роботу ……………………………………………………4 Вступ………………………………………………………………………………5 1. Огляд методів управління енергозбереженням Windows …………..….7 2.Вибір технології програмування………………………………………….11 3. Розробка програми…………..…………………………………………….15 3.1. Розробка вузла керування яскравістю екрану…………………………16 3.2 Розробка граф схеми алгоритму вузла керування яскравістю екрану ……16 3.3. Розробка вузла виведення інформації про стан батареї……………….17 3.4 Розробка граф схеми алгоритму вузла перегляду сервісів. ………………….17 3.5. Розробка вузла інформації про стан плану енергоспоживання………19 3.6 Розробка граф схеми алгоритму інформації про стан енергозбереження. 19 3.7. Розробка вузла зміни плану енергоживлення……………………………21 3.8 Розробка граф схеми алгоритму зміни плану енергоживлення………………21 4.Опис інтерфейсу та інструкції користувача…………………………………22 5. Тестування ……………………………………………………………………...23 5.1 Виявлення помилок зміни яскравості екрану ……………………………24 5.2 Виявлення помилок зміни плану енергоживлення. ……………………25 5.3. Виявлення помилок коректного відображення стану батареї ………...26 Висновок …………………………………………………………………………..28 Список літератури ……………………………………………………………….29 Додатки ……………………………………………………………………………30 Завдання на курсову роботу Розробити програму моніторингу і контролю енергоспоживанням портативних ПК з операційною системою Windows з наступними функціями: Управління яскравістю екрану Перегляд заряду батареї Отримання часу до повної розрядки батареї Отримання планів енергоспоживання Зміна плану енергоспоживання Програма повинна використовувати стандартні бібліотеки класів платформи .NET і WinApi функції. Вступ Ноутбук дозволяє працювати практично завжди і скрізь. За винятком самих екстремальних ситуацій, наприклад у сильну спеку, або під проливних дощем. Хоча для таких випадків існують спеціальні захищені комп'ютери, які випускаються деякими фірмами, наприклад Panasonic і Getac. Як можна зрозуміти, ноутбук - універсальний засіб. Звичайно, можна сперечатися, що ноутбуки не годяться для повноцінної заміни ігрових комп'ютерів або спеціалізованих робочих станцій. Але такі пристрої - приватний використання випадок комп'ютера. Перші потрібні в основному хардкорних гравцям, або техно-гікам, які прагнуть поставити на свій комп'ютер найсучасніше "залізо", другі призначені для вирішення вузькоспеціалізованих завдань, наприклад обробки векторної та растрової графіки, монтажу відеофільмів і так далі. У переважній більшості, сучасні комп'ютери вже досягли такої продуктивності, що жодним чином не можуть прискорити продуктивність праці: найпотужніший процесор не допоможе користувачеві швидше набирати текст на клавіатурі, найсучасніша відеокарта з останніх новинок не стане показувати робочий стіл гарніше, ніж це може відеокарта, випущена в минулому році. Дуже часто домашні комп'ютери використовуються як розважальний центр: "ходіння" по Інтернету, прослуховування музики, перегляд фільмів, прості аркадні (так звані казуальні) гри. Для того щоб впоратися з такими завданнями, згодиться комп'ютер самого початкового рівня. Виробники комп'ютерного обладнання, звичайно ж, звернули увагу на такий стан речей, і стали пропонувати відповідне обладнання, наприклад компанія Intel представила платформу Atom, яка з успіхом використовується в самих маленьких портативних комп'ютерах, так само відомих, як нетбуки. Величезний успіх цих самих нетбуків, випуск яких налагодили останнім часом навіть самі імениті виробники, дозволив портативних комп'ютерів обігнати по продажах комп'ютерів Стаціонарні . Плюс до всього, портативний комп'ютер може використовуватися як абсолютно незалежний пристрій, тобто буде працювати без зовнішнього живлення, без миші, та й займає набагато менше місця на робочому столі. Додам, що найчастіше покупка ноутбука відбувається просто тому, що це модно. Модно мати сучасний гаджет. Багато такі пристрої, навіть від різних виробників, часто відрізняються тільки зовнішнім виглядом. До того ж вартість простого ноутбука цілком порівнянна з вартістю не дуже комп'ютера потужного настільного. Таким чином, загальна тенденція до "мобілізації" комп'ютерного користувача змушує задуматися про те, які зручності операційної системи Windows 7 допоможуть нам у використанні мобільних комп'ютерів, як вдома, так і в дорозі. Огляд методів управління енергозбереженням Windows. Центр мобільності Windows Центр мобільності, доступний тільки на портативних комп'ютерах, забезпечує централізоване управління деякими важливими функціями мобільного пристрою з інтерфейсу єдиного користувальницького. Для запуску Центру мобільності слід натиснути комбінацію клавіш Win + X.  Центр мобільності Windows Яскравість. Просто повзунок можна змінювати яскравість екрану. Рекомендується зменшувати яскравість при роботі від батареї для зниження енергоспоживання. Гучність. Використовуйте повзунок для зміни гучності динаміків. Відмітка чекбокса "Без звуку" цілком вимкнути звук (режим Mute). Стан батареї. Дозволяє відстежуйте рівень заряду батареї для визначення часу роботи, а також змінювати план електроживлення. Бездротова мережа. Перевірка стану підключення до бездротової мережі, а також включення / вимикання бездротового адаптера. Обертання дисплея. Якщо використовується Windows 7 на планшетний ПК, використовуючи цей параметр, можна на льоту змінювати орієнтацію екрану з книжкової на альбомну і навпаки. Зовнішній дисплей. Підключення додаткового монітора до портативного комп'ютера або настроювання властивостей дисплея. Центр синхронізації. Перегляд стану синхронізації, запуск синхронізації або настроювання нового зв'язку з пристроєм. Також забезпечує доступ до настройок властивостей Центру синхронізації. Параметри презентації. Дозволяє включати режим презентації. Коли комп'ютер перебуває в цьому режимі, відключаються різні системні повідомлення, збереження екрану. Так само в цьому режимі вимикається режим сну і сну по тайм-ауту (функція не доступна в домашніх версіях операційної системи: перший будинок і).  Налаштування властивостей режиму Презентації Гнучка настройка функції управління живленням в стартовому меню У Windows Vista головна кнопка управління відповідала харчуванням за виключення комп'ютера. Для виклику інших режимів, слід було натиснути додаткову кнопку, після чого з нового меню, вибрати потрібну функцію. У Windows XP викликалося окреме вікно вибору режиму: вимикання, сон і так далі. У Windows 7 головну кнопку можна налаштувати за своїм бажанням. Для цього треба натиснути правою кнопкою миші на панелі завдань, відкрити Властивості і перейти на закладку Меню "Пуск". На цій закладці можна встановити дію кнопки живлення. Плани електроживлення Основною функціональною відмінністю мобільного комп'ютера від стаціонарного є наявність вбудованої батареї. Саме вона дозволяє працювати з мобільним пристроєм практично де завгодно. Але, як відомо, не існує вічного джерела живлення. І заряд батареї обмежений. Тому, в портативних комп'ютерах слід знаходити компроміс між необхідною продуктивністю і часом автономної роботи. Кожна частина такого комп'ютера споживає енергію: лампа дисплея, пристрій читання дисків, жорсткий диск, адаптер бездротового зв'язку. Бажано, щоб при всьому при цьому, портативний комп'ютер працював якомога довше: робота через мережу Інтернет або робота з локальними документами, прослуховування музики або перегляд відео. Найпростіша річ, яку слід зробити для цього, у разі не можливості підключення до розетки тривалий час - вибрати план електроживлення "Економія енергії". Крім цього, при відключенні від електромережі, Windows 7 автоматично перемкне функцію Aero з режиму скла в Standart. Кожен з використовуваних планів електроживлення можна гнучко налаштувати. Поведінка жорсткого диска при роботі від мережі і від батареї, запит пароля при пробудженні комп'ютера, параметри фону робочого столу і багато іншого. Також можна створити абсолютно новий план електроживлення, або змінити існуючий для включення / вимикання необхідних параметрів. Пошук проблем енергоспоживання Насправді, те, що легко налаштувати з використанням графічного меню, можна налаштувати за допомогою консольної утиліти powerсfg.exe. Розповідати тонкощі роботи з цією утилітою я не буду, все ж таки робота з нею не є простою справою. Але існує одна чудова функція цієї утиліти, яка допоможе знайти проблемні місця в роботі ноутбука і посприяє більш тонкої настройки планів електроживлення. Для запуску утиліти слід запустити командну консоль з правами Адміністратора. Введіть CMD в полі Швидкого пошуку. У результатах виберіть cmd.exe з розділу Програми, натисніть на ньому правою кнопкою миші і виберіть пункт "Запуск від імені Адміністратора" (якщо робота відбувається від імені Користувача, буде потрібно ввести пароль Адміністратора). Відкриється командна консоль з підвищеними правами.  Запуск командного консолі з підвищенням прав У нашому випадку, файл був створений в корені диска D: і називається енергією report.html. Відкривши цей файл за допомогою Internet Explorer, можна переглянути звіт про проблеми з енергоспоживанням та рекомендації щодо їх усунення.  Файл-звіт про діагностику ефективності енергоспоживання 2.Вибір технології програмування C + + - типізований мова програмування загального призначення. Підтримуючи різні парадигми програмування, поєднує властивості як високорівневих, так і низькорівневих мов. У порівнянні з його попередником - мовою C, - найбільшу увагу приділено підтримці об'єктно-орієнтованого та узагальненого програмування. Будучи одним із найбільш популярних мов програмуванн, C + + широко використовується для розробки програмного забезпечення. Область його застосування включає створення операційних систем, різноманітних прикладних програм, драйверів пристроїв, додатків для вбудованих систем, високопродуктивних серверів, а також розважальних програм. Існує декілька реалізацій мови C + + - як безкоштовних, так і комерційних. Їх виробляють Проект GNU, Microsoft, Intel і Embarcadero (Borland). C + + зробив величезний вплив на інші мови програмування, в першу чергу на Java і C #. При створенні C + + Бьерн Страуструп прагнув зберегти сумісність з мовою C. Безліч програм, які можуть однаково успішно транслюватися як компіляторами C, так і компіляторами C + +, досить велика - почасти завдяки тому, що синтаксис C + + був заснований на синтаксисі C. Стандарт C + + на 2003 рік складається з двох основних частин: опис ядра мови і опис стандартної бібліотеки. Крім того, існує величезна кількість бібліотек C + +, що не входять в стандарт. У програмах на C + + можна використовувати багато бібліотек C. Стандартизація визначила мову програмування C + +, проте за цією назвою можуть ховатися також неповні, обмежені, достандартні варіанти мови. Спочатку мова розвивалася поза формальними рамками, спонтанно, у міру вставали перед ним завдань. Розвитку мови супроводив розвиток кросс-компілятора cfront. Нововведення в мові відбивалися в зміні номера версії кросс-компілятора. C++ - надзвичайно потужна мова, що містить засоби створення ефективних програм практично будь-якого призначення, від низькорівневих утиліт і драйверів до складних програмних комплексів самого різного призначення.Зокрема:     * Підтримуються різні стилі та технології програмування, включаючи традиційне директивне програмування, ООП, узагальнене програмування, метапрограмування(шаблони,макроси).     * Передбачуване виконання програм є важливим достоїнством для побудови систем реального часу. Весь код, неявно генерований компілятором для реалізації мовних можливостей (наприклад, при перетворенні змінної до іншого типу), визначений у стандарті.      * Мова підтримує поняття фізичної (const) і логічної (mutable) константності. Це робить програму надійніше, тому що дозволяє компілятору, наприклад, діагностувати помилкові спроби зміни значення змінної.      * Ефективність. Мова спроектована так, щоб дати програмістові максимальний контроль над усіма аспектами структури і порядку виконання програми.     * Є можливість роботи на низькому рівні з пам'яттю, адресами.      Win32 API (розшифровується як інтерфейс прикладних програм) - це множина підпрограм-функцій, на яких побудована операційна система WINDOWS, яка використовує 32х-бітну адресацію, починаючи з WINDOWS 95 і закінчуючи WINDOWS XP. Розробники WINDOWS зробили багато зусиль щоб стандартизувати як назви функцій, так і їх параметри. Тому використовувати їх не так важко, якщо засвоїти деякі загальні концепції. Більшість функцій доступні для програм користувача, які написані для Windows на будь-якій мові програмування (у тому числі і на асемблері). Множина цих функцій розширюється при переході до наступної версії Windows, таким чином, забезпечується сумісність розроблених раніше програм із новими версіями операційної системи. Існують і функції, які не відображені в документації, або для свого застосування вимагають від програми спеціальних прав доступу до пам'яті. Суть функцій API зрозуміти значно легше, якщо уявити, з яких файлів вони викликаються і на які групи ці функції поділяються. Асемблер - це як раз той зручний і простий засіб, який дозволить вам звертатись безпосередньо до будь-якої функції API, що знаходиться у DLL-файлі. Секрет пізнання операційної системи через програмування на асемблері полягає у тому, що сам асемблер не накладає жодних обмежень на програму та дані, з якими вона працює. Це повинен робити сам програміст з метою захисту операційної системи від своїх некоректних дій. Таким чином, основною метою системного програмування є написання коректних програм з необмеженими можливостями (в рамках операційної системи). Мова C # Синтаксис C # дуже виразний, але простий у вивченні. Усі, хто знайомий з мовами C, C + + або Java з легкістю дізнаються синтаксис з фігурними дужками, характерний для мови C #. Розробники, які знають будь-який з цих мов, як правило, зможуть добитися ефективної роботи з мовою C # за дуже короткий час. Синтаксис C # робить простіше те, що було складно в C + +, і забезпечує потужні можливості, такі як типи значень Nullable, перерахування, делегати, лямбда-вирази і прямий доступ до пам'яті, чого немає в Java. C # підтримує універсальні методи і типи, забезпечуючи більш високий рівень безпеки і продуктивності, а також ітератори, що дозволяють при реалізації колекцій класів визначати власну поведінку ітерації, яке може легко використовуватися в клієнтському коді. Вирази LINQ (Language-Integrated Query) роблять суворо типізований запит дуже зручною мовної конструкцією. Як об'єктно-орієнтована мова, C # підтримує поняття інкапсуляції, успадкування та поліморфізму -. Всі змінні і методи, включаючи метод Головна точку входу до програми - визначення класів. Клас інкапсулюються може успадковувати безпосередньо з одного родового класу, але може реалізовувати будь-яке число інтерфейсів. У Для , які перевизначають віртуальні методи в батьківському класі, необхідно ключове слово перевизначити, щоб виключити випадкове повторне визначення. методів У мові C # структура схожа на полегшений клас: це тип, що розподіляється по стопках, який реалізує інтерфейси, але не підтримує спадкування. На додаток до основних описаним об'єктно-орієнтованим принципам, мова C # спрощує розробку компонентів програмного забезпечення завдяки кільком інноваційним конструкціям мови, до числа яких входять наступні: Інкапсульовані сигнатури методів, звані делегатами, які підтримують тіпобезопасние повідомлення про події. Властивості, що виступають в ролі методів доступу для закритих змінних-членів. Атрибути з декларативними метаданими про типи під час виконання. Вбудовані коментарі XML-документації. LINQ (Language-Integrated Query), що пропонує вбудовані можливості запитів у різних джерелах даних. Якщо буде потрібно забезпечити взаємодію з іншим програмним забезпеченням Windows, таким як об'єкти COM або власні бібліотеки DLL Win32, в мові C # можна використовувати процес, який називається "взаємодії". Процес взаємодії дозволяє програмам на C # виконувати практично будь-які дії, які може виконувати вихідне додаток на C + +. Мова C # підтримує навіть покажчики і поняття "небезпечного" коду для тих випадків, коли прямий доступ до пам'яті має вкрай важливе значення. Процес побудови C # в порівнянні з C і C + + простий і є більш гнучким, ніж в Java. Немає окремих файлів заголовка, а методи і типи не потрібно оголошувати в певному порядку. У вихідному файлі C #, може бути визначено будь-яке число класів, структур, інтерфейсів і подій. Наступні ресурси по мові C # є додатковими: Загальне введення в мову див. у розділі 1 розділу Специфікація мови C # . Докладні відомості про конкретні поняттях мови C # містяться У розділі Довідник За C # . Додаткові відомості про LINQ див. в розділі LINQ . Останні статті та ресурси, підготовлені групою Visual C #, доступні У Центрі розробників Visual C # . 3. Розробка утиліти контролю і моніторингу енергоспоживанням портативних комп’ютерів Дана програма має такі основні функціональні вузли: - Керування яскравістю екрану. - Виведення інформації про стан батареї. - Виведення інформації про стан плану енергоспоживання - Зміна плану енергоспоживання. Вузол «Керування яскравістю екрану» дозволяє користувачеві зменшити або збільшити яскравість екрану відповідно, якщо збільшити яскравість батарея розрядиться швидше, якщо зменшити повільніше. Вузол «Виведення інформації про стан батареї» виводить інформацію про батарею, чи заряджається вона чи ні, скільки часу залишилось до повної розрядки батареї. Вузол «Стан плану енергоспоживання» звертається до реєстру, вибирає дані про стани енергоспоживання і виводить їх користувачі. Вузол «Зміна плану енергоспоживання» звертається до системи і відправляє запит на зміну плану енергоспоживання. 3.1. Розробка вузла керування яскравістю екрану. Керування яскравістю екрану передбачає звернення до gdi32.dll і встановлення коефіцієнту яскравості системи. 3.2 Розробка граф схеми алгоритму вузла керування яскравістю екрану.  Рис 6. Граф-схема вузла Блок 1 – Початок роботи вузла Блок 2 – Підключення «gdi32.dll». Блок 3 – Виклик функції для отримання поточного стану яскравості екрано. Блок 4 – Зміна поточного стану яскравості шляхом зміни коефіцієнту. Блок 5 – Встановлення зміненої яскравості екрану. Блок 6 – Завершення роботи вузла. Для того, щоб отримати коефіцієнт яскравості використовується функція pGetDeviceGammaRamp = (Type_SetDeviceGammaRamp)GetProcAddress(hGDI32, "GetDeviceGammaRamp"); Для зміни яскравості екрану використовується: pSetDeviceGammaRamp = (Type_SetDeviceGammaRamp)SetProcAddress(hGDI32, "SetDeviceGammaRamp"); 3.3. Розробка вузла виведення інформації про стан батареї. Для того щоб отримати дані про стан батареї використовуються WinApi функції для роботи з батареєю. 3.4 Розробка граф схеми алгоритму вузла перегляду сервісів.  Рис. 7 Граф-схема алгоритму Блок 1 – Початок роботи вузла Блок 2 – Отримання статусу зарядки Power on/off. Блок 3 – Отримання рівня заряду. Блок 4 – Отримання рівня заряду у відсотках. Блок 5 – Обрахунок часу до повної розрядки батареї. Блок 6 – Обрахунок часу максимального часу роботи від батареї. Блок 7 – Завершення роботи вузла. Для отримання списку всіх сервісів використовуються WinApi функції GetSystemPowerStatus(&sps); sps.ACLineStatus sps.BatteryFlag sps.BatteryLifePercent sps.BatteryLifeTime sps.BatteryFullLifeTime 3.5. Розробка вузла виведення інформації про стан плану енергоспоживання Даний вузол звертається до реєстру Windows і отримує дані про стан енергоспоживання. Доступ до реєстру забезпечується функціями стандартної бібліотека .NET 3.6 Розробка граф схеми алгоритму інформації про стан енергозбереження.  Рис. 8 Граф-схема алгоритму Блок 1- Початок роботи вузла Блок 2 – Отримання доступу до реєстру Windows Блок 3 – Відкриття гілки яка відповідає за план енергоспоживання Блок 4 – Отримання планів енергоспоживання Блок 5 – Отримання активного плану енергоспоживання Блок 6 – Завершення роботи з реєстром Блок 7 – Завершення роботи вузла. Щоб отримати дані проплан енергоспоживання використовується: RegistryKey Key = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Power\User\PowerSchemes"); string[] powers = Key.GetSubKeyNames(); Active = (string)Key.GetValue("ActivePowerScheme"); 3.7. Розробка вузла зміни плану енергоживлення. Для того щоб змінити план енергоживлення використовується системна утиліта Powercfg 3.8 Розробка граф схеми алгоритму зміни плану енергоживлення.  Рис. 9 Граф-схема алгоритму Блок 1 – Початок роботи вузла Блок 2 – Отримання поточного плану енергоживлення. Блок 3 – Вибір нового плану з переліку можливих. Блок 4 – Отримання доступу до утиліти Powercfg. Блок 5 – Зміна поточного плану з допомогою утиліти Powercfg. Блок 6 – Завершення роботи вузла. Щоб змінити поточний план енергоживлення використовується: Active = (string)pow[rb.Text]; ProcessStartInfo prc = new ProcessStartInfo("Powercfg", "-setactive " + Active); prc.WindowStyle = ProcessWindowStyle.Hidden; Process.Start(prc); 4.Опис інтерфейсу та інструкції користувача. Програма «Утиліта моніторингу та контролю енергоспоживанням портативних комп’ютерів» можна запустити з виконавчого файлу Brightness.exe. Для її запуску необхідно платформу.NET 2.0, Windows не нижче 2000 встановлений на портативний ПК. Дана програма є досить простою у використанні.  Рис. 10 Головне вікно програми В програмі приступні наступні функції: Зміна яскравості екрану Зміна плану енергоживлення Відображення інформації про батарею. Керування яскравістю екрану відбувається з допомогою рухомого повзунка, перетягуючи його в ліву частину яскравість зменшується, а в праву збільшується. Вибір плану енергоспоживання відбувається з допомогою перемикачів, кожному перемикачеві відповідає один план енергоживлення Блок відображення стану батареї є дуже простим і інформативним він швидко реагує на всі зміни пов’язані з роботою батареї 5. Тестування Відлагодження програми відбувається на основі спеціально створених тестів за допомогою автоматизованого відлагоджувача який присутній в середовищі Ms Visual Studio 2010, в покроковому режимі перевіряється значення потрібних змінних і вмістиме потрібних структур даних. За допомогою breakpoints відбувається запинка виконання програми в тих місцях де відбулася логічна помилка або в місцях визначених студентом. 5.1 Виявлення помилок зміни яскравості екрану До помилок на цьому етапі відносяться помилки зміни яскравості екрану:  Рис. 11 Вікно програми з нормальним режимом яскравості Якщо перетягнути повзунок в ліво яскравість зменшиться  Рис. 12 Вікно програми із зменшеним режимом яскравості Якщо перетягнути повзунок вправо яскравість збільшиться  Рис. 12 Вікно програми із збільшеним режимом яскравості 5.2 Виявлення помилок зміни плану енергоживлення. До помилок на цьому етапі відносяться помилки некоректної зміни плану енергоспоживання.  Рис. 13 Вікно відображення поточного плану  Рис. 13 Вікно відображення зміненого плану  Як видно зміна плану пройшла успішно і даний блок працює коректно 5.3. Виявлення помилок коректного відображення стану батареї До помилок на цьому етапі відносяться помилки отримання коректних даних про стан батареї. На даному скріншоті програма показує що батареє заряжається.  Якщо відключити живлення, програма відреагує на зміни і оновить свої дані  Висновок Підчас створення програмного продукту я навчився навичкам роботи з енергоспоживанням у портативних ПК. На початкових стадіях розробки було проведено аналіз задачі проекту та розроблено граф схеми роботи програмного продукту. Наступні етапи проектування, використовуючи загальнотеоретичні положення сформульовані на ранніх стадіях синтезу, реалізовували проект на програмному рівні. У курсовій роботі була розроблена утиліта «Керування і моніторингу енергоспоживання» з можливістю роботи з екраном і батареєю портативних ПК. Також було проведене тестування всіх модулів, яке підтвердило, що весь код який міг призвести до помилок опрацьований і дозволяє працювати програмі коректно. Під час виконання курсової роботи було успішно засвоєно методи розробки системних програм, а зокрема програми керування енергозбереженням. Список літератури В. Зиборов Visual C# 2010 на примерах Системное программное обеспечение / А.В.Гордеев, А.Ю.Молчанов. Э. Троелсен Язык программирования C# 2010 и платформа .NET 4.0 Колисниченко Секреты, настройка и оптимизация реестра Windows 7 Дж.Донован. Системное программирование. Додатки using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; 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); short val; private void SwitchImg() { Image img = Image.FromFile(@"img\8.png"); if (GetPowerStatus() == "Power on") { if (GetBatteryPercent() >= 95) img = Image.FromFile(@"img\1.png"); if (GetBatteryPercent() < 95 && GetBatteryPercent() >= 20) img = Image.FromFile(@"img\2.png"); if (GetBatteryPercent() < 20) img = Image.FromFile(@"img\7.png"); pictureBox1.Image = img; } if (GetPowerStatus() == "Power off") { if (GetBatteryPercent() > 50) img = Image.FromFile(@"img\3.png"); if (GetBatteryPercent() == 50) img = Image.FromFile(@"img\4.png"); if (GetBatteryPercent() < 50 && GetBatteryPercent() > 10) img = Image.FromFile(@"img\5.png"); if (GetBatteryPercent() <= 10) img = Image.FromFile(@"img\6.png"); pictureBox1.Image = img; } if (GetBatteryFlag() == "Батарея відсутня") { img = Image.FromFile(@"img\8.png"); pictureBox1.Image = img; } } 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, radioButton4, radioButton5, radioButton6 }; 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) { trackBar1.Value = 5; val = (short)trackBar1.Value; val = (short)(val * 25.5); SetBrightness(val); label2.Text = GetPowerStatus(); label3.Text = GetBatteryFlag(); label4.Text = GetBatteryPercent().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(); } SwitchImg(); GetPowers(); if (pow.Count != 0) { int h = this.Height + 53; this.Size = new Size(this.Width, h); } Create_radio(); } private void trackBar1_Scroll(object sender, EventArgs e) { val = (short)trackBar1.Value; val = (short)(val * 25.5); SetBrightness(val); } private void timer1_Tick(object sender, EventArgs e) { label2.Text = GetPowerStatus(); label3.Text = GetBatteryFlag(); label4.Text = GetBatteryPercent().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(); } SwitchImg(); } private void radioButton6_CheckedChanged(object sender, EventArgs e) { ChangePow(radioButton6); } private void radioButton5_CheckedChanged(object sender, EventArgs e) { ChangePow(radioButton5); } private void radioButton4_CheckedChanged(object sender, EventArgs e) { ChangePow(radioButton4); } 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); } } } #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 "Power off"; case 1: return "Power on"; 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_
Антиботан аватар за замовчуванням

20.05.2013 23:05-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!