Розробка програми "Менеджер пристроїв"
Призначення менеджеру пристроїв. Обґрунтування вибору мови програмування. Розробка структурної схеми і опис діалогового інтерфейсу програми. Блок-схема програмного додатку, основні функції і алгоритм його роботи. Методики і інструкція його тестування.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | украинский |
Дата добавления | 17.11.2014 |
Размер файла | 3,4 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Вінницький національний технічний університет
Кафедра програмного забезпечення
КУРСОВА РОБОТА
«Операційні системи»
на тему: Розробка програми менеджер пристроїв
Студента 3 курсу 1ПІ-11б групи
Спеціальності «Програмна Інженерія»
Олімбйовський О.А.
м. Вінниця - 2013 рік
Анотація
У роботі розроблено програму менеджер пристроїв, для перерахування встановлених пристроїв. Реалізовано виведення пристроїв у дереві. Програму призначено для перегляду пристроїв та інформації про них.
Зміст
- Вступ
- 1. Аналіз сучасного стану питання та обгрунтування завдання на роботу
- 1.1 Аналоги і їх основні функції
- 1.2 Обґрунтування вибору мови програмування
- 2. Розробка інтерфейсу програми
- 2.1 Обґрунтування вибору інтерфейсу
- 2.2 Опис інтерфейсу
- 2.3 Структурна схема інтерфейсу
- 2.4 Розробка дизайну
- 3. Розробка моделі програмного додатку
- 3.1 Блок-схема
- 3.2 Алгоритм роботи
- 4. Тестування
- 4.1 Методики тестування
- 4.2 Інструкція тестування програми
- Висновки
- Перелік посилань
Додаток А - лістинг програми devmgr.cpp…
Додаток Б - Лістинг програми GetTypeInfo.cpp
Вступ
Менеджер пристроїв відображає встановлене на комп'ютері обладнання в графічному поданні. Всі пристрої взаємодіють з ОС Windows за допомогою програми, яка називається драйвером пристрою.
Для того щоб підключити обладнання до комп'ютера, недостатньо просто фізично приєднати його до системного блоку. Щоб операційна система розпізнала це обладнання, необхідна наявність спеціальної програми - драйвер. Тільки після цього комп'ютер «побачить» обладнання і зможе працювати з ним в єдиній зв'язці.
Драйвер (англ. driver) -- комп'ютерна програма, за допомогою якої операційна система отримує доступ до приладу апаратним забезпеченням [1].
Апаратне забезпечення - електронні та механічні частини обчислювального пристрою, що входять до складу системи або мережі, виключаючи програмне забезпечення і дані (інформацію, яку обчислювальна система зберігає й обробляє). Апаратне забезпечення включає: комп'ютери та логічні пристрої, зовнішні пристрої та діагностичну апаратуру, енергетичне обладнання, батареї та акумулятори [2].
У загальному випадку для використання кожного пристрою, підключеного до комп'ютера, необхідний спеціальний драйвер. Зазвичай операційна система вже містить драйвери для ключових компонентів апаратного забезпечення, без яких система не зможе працювати. Однак для більш специфічних пристроїв (таких, як графічна плата або принтер) можуть знадобитися спеціальні драйвери, які надає виробник пристрою.
В менеджері пристроїв можна подивитися, який жорсткий диск встановлений і скільки їх взагалі в системі, який центральний процесор використовується, вказана модель відео карти, показано наявність мережевих адаптерів (мережевих карт) і багато іншого.
1. Аналіз сучасного стану питання та обгрунтування завдання на роботу
1.1 Аналоги і їх основні функції
Зазвичай менеджер пристроїв використовується для перевірки стану обладнання та оновлення драйверів. Досвідчені користувачі, які добре знаються в структурі апаратного забезпечення комп'ютера, можуть за допомогою менеджера пристроїв проводити діагностику роботи обладнання для усунення конфліктів пристроїв і зміни параметрів ресурсів.
У «Менеджері пристроїв» Windows зберігається інформація про пристрої, встановлені на комп'ютері. У ньому зберігається наступна інформація:
1. Відомості про справність / несправність роботи пристроїв, а також повідомлення про помилки при виникненні неполадок.
2. Відомості про встановлені пристрої
3. Порти IRQ
4. Дані про розподіл пам'яті
5. Інформація про драйвери пристроїв
Рисунок 1.1 - «Менеджер пристроїв» Windows
У «Менеджері пристроїв» Windows можна вносити зміни до властивостей пристроїв.
Everest - програма для перегляду інформації про апаратні і програмні конфігурації комп'ютера, розроблена компанією Lavalys. Була послідовницею AIDA32, замінена на ринку програмою AIDA64 [3].
Програма аналізує конфігурацію комп'ютера і видає детальну інформацію:
1. Про встановлені в системі пристрої
2. Їх характеристики
3. Підтримуваних ними наборах команд і режимах роботи
4. Їх виробників
5. Встановлене програмне забезпечення
6. Конфігурацію операційної системи
7. Встановлені драйвера
8. Автоматичне завантажування програм
9. Запущені процеси
10. Наявні ліцензії
Рисунок 1.2 - Програма «Everest»
Програма «Device Remover» є потужним додатком, що дозволяє вам переглядати і управляти пристроями, встановленими на вашому комп'ютері. Програма надає детальну інформацію про кожну послугу чи пристрій, який використовується [4].
Деякі ключові особливості «Device Remover»:
1. Поглиблене уявлення всіх встановлених пристроїв, класів пристроїв, драйверів і сервісів в системі Windows
2. Легке видалення декількох пристроїв On-The-Fly
3. Модифікація / Маніпуляція пристроїв, драйверів і служб у Системі
4. Детальний вигляд пристрою
Рисунок 1.3 - Програма «Device Remover»
1.2 Обґрунтування вибору мови програмування
Мова програмування -- формальна знакова система, призначена для запису комп'ютерних програм. Мову програмування визначає набір лексичних, синтаксичних і семантичних правил, визначаючих зовнішній вигляд програми і дії, які виконає виконавець (комп'ютер) під її управлінням.
Особливості мови програмування:
1. Функція: мова програмування призначена для написання комп'ютерних програм, які застосовуються для передачі комп'ютеру інструкцій по виконанню того або іншого обчислювального процесу і організації управління окремими пристроями.
2. Завдання: мова програмування відрізняється від природних мов тим, що призначена для передачі команд і даних від людини до комп'ютера, тоді як природні мови використовуються для спілкування людей між собою. Можна узагальнити визначення «мов програмування» -- це спосіб передачі команд, наказів, чіткого керівництва до дії, тоді як людські мови служать також для обміну інформацією.
3. Виконання: мова програмування може використовувати спеціальні конструкції для визначення і маніпулювання структурами даних і управління процесом обчислень.
Основними мовами програмування є Java, C, C++, C#, PHP, VisualBasic, Delphi та інші.
Мова програмування С # - розроблена в корпорації Microsoft групою програмістів під керівництвом Андер-са Хейльсберга і Скотта Вілтамата, була створена спеціально для платформи .NET. C # є і Web орієнтованою мовою програмування.
С # - це подієво-керована, повністю об'єктно-орієнтована мова візуального програмування, в якій програми створюються за допомогою інтегрованого середовища розробки (Integrated Development Environment, IDE). У цьому середовищі програміст може писати, запускати, тестувати і налагоджувати програми, написані на С #. Процес оперативного створення програмних додатків за допомогою IDE називається швидкої розробкою додатків (Rapid Application Development, RAD).
C # призначена для створення переносимого коду. Всі змінні автоматично ініціалізуються середовищем і мають типову захищеність, що дозволяє уникнути невизначених ситуацій у разі відсутності ініціалізації, зміни в об'єкті або спроби виконати недопустиме перетворення типів.
У C # уніфікована система типів: кожен тип розглядається як об'єкт. Об'єкти зібрані в простір імен (namespaces), який дозволяє програмно звертатися до чого-небудь. C # дозволяє використовувати типізовані, розширювані метадані, які можуть бути прикріплені до об'єкта. Архітектурою проекту можуть визначатись локальні атрибути, які будуть пов'язані з будь-якими елементами мови - класами, інтерфейсами і т.д.
Java -- об'єктно-орієнтована мова програмування, випущена компанією SunMicrosystems у 1995 році як основний компонент платформи Java. Синтаксис мови багато в чому походить від C та C++. У офіційній реалізації, Java програми компілюються у байткод, який при виконанні інтерпретується віртуальною машиною для конкретної платформи. Всі дані і дії групуються в класи об'єктів. Виключенням з повної об'єктності є примітивні типи (int, float тощо). Через це, Java не вважається повністю об'єктно-орієнтовною мовою.
Програми на Java утворені з визначень класів та інтерфейсів. Класи містять змінні та сталі, які утримують дані, методи, які виконують дії, та конструктори, які створюють екземпляри класів -- об'єкти. Дані можуть мати простий тип (наприклад байт, ціле число, символ) або бути посиланням на об'єкт. Мова Java є статично типізованою.
Недоліки Java:
1. відсутність можливості оперативного доступу до змінних і методів класу;
2. відсутність спливаючої підказки по методах, які можна застосувати до поточного об'єкту;
C++ -- універсальна мова програмування високого рівня з підтримкою декількох парадигм програмування: об'єктно-орієнтованої, узагальненої та процедурної. Розроблена Б'ярном Страуструпом в AT&T Bell Laboratories (Мюррей-Хілл, Нью-Джерсі) у 1979 році та названа «Сі з класами». Страуструп перейменував мову у C++ 1983 р.. Базується на мові С. У мові С++ немає вбудованих засобів вводу/виводу - вони здійснюються за допомогою функцій, типів та об'єктів, що містяться у стандартних бібліотеках. Використовується два способи: функції, успадковані з мови С та об'єкти С++. Всі обўєкти (змінні, масиви тощо), з якими працює програма в С++, необхідно визначати або описувати. Кожна змінна у програмі - це об'єкт, який володіє ім'ям і значенням. Після визначення змінної з ініціалізацією всі звернення у програмі до неї за іменем замінюються компілятором на адресу іменованої області оперативної пам'яті, в якій зберігається значення змінної. Підтримує роботу на низькому рівні з пам'яттю, адресами, портами. Надає можливість створювати узагальнені алгоритмів для різних типів даних, їх спеціалізацію, і обчислення на етапі компіляції, з використанням шаблонів [5].
Розглянувши такі мови програмування, як С++, C# та Java, для розробки програмного додатку було вибрано об'єктно-орієнтовану мову програмування С++, яка є мовою високого рівня і дозволяє швидко і ефективно створювати програми.
менеджер пристрій інтерфейс програма
2. Розробка інтерфейсу програми
2.1 Обґрунтування вибору інтерфейсу
Інтерфейс -- сукупність засобів, методів і правил взаємодії (управління, контролю) між елементами системи.
Інтерфейс користувача -- сукупність засобів для обробки та відображення інформації, максимально пристосованих для зручності користувача; різновид інтерфейсів, в якому одна сторона представлена людиною (користувачем), інша -- машиною/пристроєм. Представляє собою сукупністю засобів і методів, за допомогою яких користувач взаємодіє з різними, найчастіше складними, машинами, пристроями і апаратурою.
При розробці інтерфейсу необхідно враховувати наступні принципами:
1. Стандартизація. Рекомендується використовувати стандартні, перевірені багатьма програмістами і користувачами інтерфейсні рішення.
2. Зручність і простота роботи. Інтерфейс повинен бути інтуїтивно зрозумілим. Бажано, щоб усі дії легко запам'ятовувалися і не вимагали стомлюючих процедур.
3. Зовнішній дизайн. Важливо, щоб інтерфейс не стомлював зір. Він повинен бути розрахований на тривалу роботу користувача з додатком протягом дня.
До сукупності засобів, за допомогою яких користувач взаємодіє з різними програмами і пристроями, відносяться:
1. Інтерфейс командного рядка: інструкції комп'ютеру даються шляхом введення з клавіатури текстових рядків (команд).
2. Графічний інтерфейс користувача: програмні функції представляються графічними елементами екрану.
3. Діалоговий інтерфейс: наприклад, пошук
4. Природно-мовний інтерфейс: користувач «розмовляє» з програмою на рідній йому мові.
5. Тактильний інтерфейс: кермо, джойстик і так далі
6. Нейрокомп'ютерний інтерфейс (англ. brain-computerinterface): відповідає за обмін між нейронами і електронним пристроєм за допомогою спеціальних імплантованих електродів [6].
Для написання даної програми було вирішено обрати діалоговий інтерфейс, адже при використанні програми буде вестись діалог між користувачем та комп'ютером за допомогою графічних елементів: меню, вікон, тощо.
Для забезпечення діалогу між програмою та користувачем було вирішено використовувати діалогове вікно, розроблене за SDI (SingleDocumentInterface) типом інтерфейсу.
Діалогове вікно -- це особливий тип вікна, яке задає запитання і дозволяє вибрати варіанти виконання дії, або ж інформує користувача. Діалогові вікна зазвичай відображаються тоді, коли програмі для подальшої роботи потрібна відповідь користувача.
Одновіконний (SDI) інтерфейс - це тип інтерфейсу, у якому надається можливість роботи тільки з одним документом в одному вікні. Під документом у цьому випадку потрібно розуміти форму, призначену для роботи з даними, а не з конкретним документом. Цей тип інтерфейсу підходить для програм, створених для роботи з документом одного типу з невеликою кількістю полів.
2.2 Опис інтерфейсу
Інтерфейс програмного додатку менеджер пристроїв реалізовано на основі інтерфейсу типу SDI, програма складається з одного діалогового вікна Т подібної структури, в якому містяться всі необхідні елементи керування.
Для реалізації всіх команд, що потрібні для повноцінної роботи програми, на діалоговому вікні було розміщено та використано наступні елементи:
1. Menu «Файл» - слугує для обновлення програми та виходу із неї
2. Menu «Інформація» - слугує для виводу інформації про програму та інструкцію користування
3. TreeCtrl - дерево для відображення пристроїв
4. ListControl - список для відображення інформації про пристрій
2.3 Структурна схема інтерфейсу
Рисунок 2.1 - Структурна схема графічного інтерфейсу програми
2.4 Розробка дизайну
Вікно програми має стандартних для Windows інтерфейс. У його верхній частині знаходиться класичне меню: Файл, Інформація. У списку під назвою комп'ютера можна побачити всі категорії встановленого обладнання. По кожній категорії можна отримати список встановлених на комп'ютері пристроїв даного типу. Кількість необхідних для повноцінної роботи програми полів та кнопок зведено до мінімуму.
Рисунок 2.2 - Головне вікно програми
По кожній категорії можна отримати список встановлених на комп'ютері пристроїв даного типу клацнувши мишкою по значку + біля категорії яка вас цікавить, тим самим розкривши список.
Рисунок 2.3 - Дерево із закритими списками категорій
Рисунок 2.4 - Дерево із відкритими списками категорій
Для отримання більш детальної інформація про пристрій необхідно один раз на нього натиснути (рис. 2.5).
Рисунок 2.5 - Відображення інформації про пристрій
Для того щоб обновити програму потрібно в меню «Файл» натиснути кнопку «Обновити» (рис. 2.6).
Рисунок 2.6 - Обновлення програми
При натисненні кнопки «Про програму» відображається інформація про програму (рис. 2.7).
Рисунок 2.7 - Інформація про програму
При натисненні кнопки «Довідка» викликається інструкція користування програмою (рис. 2.8).
Рисунок 2.8 - Інструкція користувача
3. Розробка моделі програмного додатку
3.1 Блок-схема
Блок-схема - поширений тип схем (графічних моделей), що описують алгоритми або процеси, в яких окремі кроки зображуються у вигляді блоків різної форми, з'єднаних між собою лініями [7]. Нижче наведено блок-схеми основних процедур та функцій, які було використано при написанні програми.
Рисунок 3.1 - Блок схема роботи функції AddNewDeviceNode
3.2 Алгоритм роботи
Алгоритм -- послідовність, система, набір систематизованих правил виконання обчислювального процесу, що обов'язково приводить до розв'язання певного класу задач після скінченного числа операцій [8]. При написанні комп'ютерних програм алгоритм описує логічну послідовність операцій. Для візуального зображення алгоритмів часто використовують блок-схеми.
Рисунок 3.2 - Блок схема роботи функції AllocNewDeviceNode
4. Тестування
4.1 Методики тестування
Тестування -- один з розділів діагностики. Тестування застосовується в техніці, медицині, психіатрії, освіті для визначення придатності об'єкта тестування для виконання тих чи інших функцій. У завдання тестування не входить визначення причин невідповідності заданим вимогам (специфікаціям). Якість тестування і достовірність його результатів значною мірою залежить від методів тестування та складу тестів.
Процес тестування включає:
1. подачу тестового набору;
2. визначення реакції об'єкта тестування на тестовий набір;
3. оцінку реакції і висновки.
Тестовий набір складається з окремих тестів і розробляється таким чином, щоб забезпечити повне або значне покриття множини ймовірних впливів на об'єкт тестування. Цим, також, визначається складність розробки як окремих тестів, так і тестових наборів.
У технічній діагностиці застосовуються формалізовані методи розробки мінімальних, необхідних і достатніх тестів перевірки працездатності (відповідності специфікаціям).
Тестування програмного забезпечення - процес дослідження, випробування програмного забезпечення з метою отримання інформації про якість продукту.
Якість програмного забезпечення можна визначити як сукупність характеристик досліджуваного ПЗ з урахуванням таких складових:
1. надійність;
2. супроводжуваність;
3. практичність;
4. ефективність;
5. мобільність;
6. функціональність.
Рівні тестування:
1. Модульне тестування - тестується мінімально можливий для тестування компонент, наприклад, окремий клас або функція.
2. Інтеграційне тестування - тестуються інтерфейси між компонентами, підсистемами або системами. За наявності резерву часу на даній стадії тестування ведеться ітераційно, з поступовим підключенням наступних підсистем.
3. Системне тестування - тестується інтегрована система на її відповідність вимогам.
4. Альфа - тестування - імітація реальної роботи з системою штатними розробниками, або реальна робота з системою потенційними користувачами / замовником. Найчастіше альфа - тестування проводиться на ранній стадії розробки продукту, але в деяких випадках може застосовуватися для закінченого продукту в якості внутрішнього приймального тестування.
5. Бета-тестування - у деяких випадках виконується поширення попередньої версії (у випадку пропрієтарного ПЗ іноді з обмеженнями по функціональності або часу роботи) для деякої більшої групи осіб з тим , щоб переконатися, що продукт містить достатньо мало помилок. Іноді бета -тестування виконується для того, щоб отримати зворотній зв'язок про продукт від його майбутніх користувачів.
Тестування "білої скриньки": перевіряється коректність побудови всіх елементів програми і правильність їх взаємодії один з одним. Аналізуються керуючі зв'язки елементів або інформаційні зв'язки. Тестування за принципом "білого ящика" характеризується ступенем, в якому тести виконують або покривають логіку (вихідний текст) програми.
Тестування "чорної скриньки": При тестуванні «чорної скриньки» розглядаються системні характеристики програм, ігнорується їх внутрішня логічна структура. Ці тести демонструють:
1. як виконуються функції програми;
2. як приймаються вихідні дані;
3. як виробляються результати;
4. як зберігається цілісність зовнішньої інформації.
4.2 Інструкція тестування програми
Для повного тестування розробленого програмного продукту потрібно перевірити всі варіанти використання. Варіанти використання (Use Cases) це - опис послідовності дій, які може здійснювати система у відповідь на зовнішні дії користувачів або інших програмних систем. Варіанти використання відображають функціональність системи з точки зору здобуття значимого результату для користувача.
При запуску програми користувачем повинно завантажитись головне вікно програмного додатку (рис. 2.2).
При натисненні кнопки «Обновити» програма повинна обновити всі дані (рис. 4.1).
Рисунок 4.1 - Обновлення програми
Клацнувши мишкою по значку + або по певній категорії програма повинна вивести список встановлених на комп'ютері пристроїв даного типу (рис. 4.2).
Рисунок 4.2 - Відкрита категорія «DVD»
Клацнувши один раз мишкою на пристрій програма повинна вивести більш детальну інформацію про нього (рис. 4.3).
Рисунок 4.4 - Більш детальна інформація про пристрій
При проведенні описаних тестувань було перевірено, що програма функціонує правильно.
Висновки
В курсовій роботі було розроблено програму менеджер пристроїв, для перерахування встановлених пристроїв. Реалізовано виведення пристроїв у дереві. Програму призначено для перегляду пристроїв та інформації про них.
Програмний додаток був розроблений на мові С++, яка є мовою високого рівня і дозволяє швидко і ефективно створювати програми, підтримує роботу на низькому рівні з пам'яттю, адресами, портами, надає можливість створювати узагальнені алгоритмів для різних типів даних, їх спеціалізацію, і обчислення на етапі компіляції, з використанням шаблонів.
Вікно програми має стандартних для Windows інтерфейс типу SDI, який складається з одного діалогового вікна Т подібної структури з усіма необхідними елементами керування. У його верхній частині знаходиться класичне меню: Файл, Інформація. У списку під назвою комп'ютера можна побачити всі категорії встановленого обладнання. По кожній категорії можна отримати список встановлених на комп'ютері пристроїв даного типу. Кількість необхідних для повноцінної роботи програми полів та кнопок зведено до мінімуму.
За допомогою блок-схема було описано основні функції і алгоритми роботи програми.
Для тестування розробленого програмного продукту було використано варіанти використання (Use Cases) - опис послідовності дій, які може здійснювати система у відповідь на зовнішні дії користувачів або інших програмних систем.
менеджер пристрій інтерфейс програма
Перелік посилань
1. Страуструп “Программирование: принципы и практика использования C++”. Диалектика-Вильямс, 2010 г., 1248 стр.
2. Дженифер Тидвелл. Разработка пользовательских интерфейсов. - Издательство: Питер, 2008. - 487с
3. Седжвик “Алгоритмы на С++”. Вильямс, 2011 г., 1026 стр.
Додаток А - Лістинг програми DevMgr.cpp
#include "devmgr.h"
HINSTANCE _hInst = 0L;
HWND _hDlg = 0L;
//
BOOL EnablePrivilege(LPCTSTR PrviName)
{
HANDLE hToken = 0L;
TOKEN_PRIVILEGES Newtp;
BOOL bRtn = FALSE;
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken);
if (LookupPrivilegeValue(NULL,PrviName, &Newtp.Privileges[0].Luid))
{
Newtp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
Newtp.PrivilegeCount = 1;
if (AdjustTokenPrivileges(hToken, FALSE, &Newtp, sizeof(Newtp), NULL, NULL))
bRtn = TRUE;
};
CloseHandle(hToken);
return bRtn;
};
char OpenINFFile(const char bType, char *pszName)
{
char szFile[MAX_PATH] = {0};
char szTitle[64] = {0L};
OPENFILENAME openFile = {0L};
openFile.lStructSize = sizeof(OPENFILENAME);
openFile.hwndOwner = _hDlg;
openFile.hInstance = _hInst;
if (bType)
openFile.lpstrFilter = "INF File(*.inf)\0*.inf\0";
else
openFile.lpstrFilter = "System File(*.sys)\0*.sys\0";
openFile.lpstrFile = szFile;
openFile.lpstrTitle = szTitle;
openFile.nMaxFileTitle = 64;
openFile.nMaxFile = MAX_PATH;
openFile.Flags = OFN_FILEMUSTEXIST | OFN_EXPLORER;
openFile.Flags |= OFN_HIDEREADONLY; // | OFN_ENABLETEMPLATE;
if (GetOpenFileName(&openFile))
{
strcpy(pszName, szFile);
return 1;
};
return 0;
};
void SetCharSet(const UINT nIDList1, const UINT nIDList2)
{
HWND hListView1 = GetDlgItem(_hDlg, nIDList1);
HWND hListView2 = GetDlgItem(_hDlg, nIDList2);
ListViewInsertColumnText(hListView1, 0, 0, "Поле", 0);
ListViewInsertColumnText(hListView1, 1, 0, "Опис", 1);
ListViewInsertItemText(hListView1, 0, 0, "Глобально унікальний ідентифікатор");
ListViewInsertItemText(hListView1, 1, 0, "Ідентифікатор обладнання");
ListViewInsertItemText(hListView1, 2, 0, "Ідентифікатор інсталяції");
ListViewInsertItemText(hListView1, 3, 0, "Виробник");
ListViewInsertItemText(hListView1, 4, 0, "Постачальник");
ListViewInsertItemText(hListView1, 5, 0, "Опис драйвера");
ListViewInsertItemText(hListView1, 6, 0, "Назва розділу");
ListViewInsertItemText(hListView1, 7, 0, "INF дата");
ListViewInsertItemText(hListView1, 8, 0, "INF шлях");
ListViewInsertItemText(hListView1, 9, 0, "Шлях до зображення");
ListViewInsertItemText(hListView1, 10, 0, "Індекс");
ListViewInsertItemText(hListView1, 11, 0, "Шлях до пристрою");
ListViewInsertItemText(hListView1, 12, 0, "Група");
ListViewInsertItemText(hListView1, 13, 0, "Старт");
//ListViewInsertColumnText(hListView2, 0, 0, "Resource Type", 0);
//ListViewInsertColumnText(hListView2, 1, 0, "Setting", 1);
};
INT_PTR CALLBACK InstallDialog(HWND hDlg, UINT uMsg,
WPARAM wParam, LPARAM lParam)
{
static FILE *pf = 0L;
static char szINF[MAX_PATH] = {0};
static char bType;
switch(uMsg)
{
case WM_INITDIALOG:
{
DisableCloseBox(hDlg);
bType = (!lParam) ? 0 : 1;
EnableWindow(GetDlgItem(hDlg, IDC_ENABLEDRVBTN), 0);
};
break;
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
};
};
break;
};
return 0;
};
INT_PTR CALLBACK MainDialog(HWND hDlg, UINT uMsg,
WPARAM wParam, LPARAM lParam)
{
static CRITICAL_SECTION criticalSection = {0};
switch(uMsg)
{
case WM_INITDIALOG:
{
HWND hListView = GetDlgItem(hDlg, IDC_LIST1);
_hDlg = hDlg;
WaitCursor(1);
EnablePrivilege(SE_DEBUG_NAME);
EnablePrivilege(SE_LOAD_DRIVER_NAME);
DisableCloseBox(hDlg);
if (!InitialDeviceList() || !InitialDeviceOrder())
EndDialog(hDlg, 0);
ListViewSetExtStyle(GetDlgItem(hDlg, IDC_LIST1), 0);
ListViewSetExtStyle(GetDlgItem(hDlg, IDC_LIST2), 0);
SetCharSet(IDC_LIST1, IDC_LIST2);
TreeViewRemoveAllNodes(hDlg, IDC_TREE1);
InitialImageData();
EnumWDMDriver(IDC_TREE1, IDB_MYCOMP);
SendMessage(GetDlgItem(hDlg, IDC_RADIO2), BM_SETCHECK, BST_CHECKED, 0);
EnableWindow(GetDlgItem(hDlg, IDC_DELBTN), 0);
EnableWindow(GetDlgItem(hDlg, IDC_COPYPATHBTN), 0);
WaitCursor(0);
InitializeCriticalSection(&criticalSection);
};
break;
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case IDC_REFBTN:
{
SendMessage(hDlg, WM_DEVICECHANGE, 0, 0);
};
break;
case 40001:
SendMessage(hDlg, WM_DEVICECHANGE, 0, 0);
break;
case IDC_EXIT:
FreeAllocDeviceNode();
FreeAllDeviceOrderNode();
DeleteCriticalSection(&criticalSection);
EndDialog(hDlg, 0);
break;
};
break;
};
break;
case WM_DEVICECHANGE:
{
EnterCriticalSection(&criticalSection);
WaitCursor(1);
FreeAllocDeviceNode();
FreeAllDeviceOrderNode();
if (!InitialDeviceList() || !InitialDeviceOrder())
EndDialog(hDlg, 0);
ListViewRemoveAllItems(GetDlgItem(hDlg, IDC_LIST1));
ListViewRemoveAllItems(GetDlgItem(hDlg, IDC_LIST2));
SetCharSet(IDC_LIST1, IDC_LIST2);
TreeViewRemoveAllNodes(hDlg, IDC_TREE1);
InitialImageData();
EnumWDMDriver(IDC_TREE1, IDB_MYCOMP);
WaitCursor(0);
LeaveCriticalSection(&criticalSection);
};
break;
case WM_NOTIFY:
{
NMHDR *pnmh = (NMHDR*)lParam;
switch(pnmh->idFrom)
{
case IDC_LIST1:
{
if (pnmh->code == NM_CLICK)
{
char szBuf[MAX_PATH] = {0};
HWND hList = GetDlgItem(hDlg, IDC_LIST1);
if (ListViewGetItemSelect(hList) == 10 ||
ListViewGetItemSelect(hList) == 11)
{
ListViewGetSpecItem(hList, 10, 1, szBuf);
if (*szBuf)
EnableWindow(GetDlgItem(hDlg, IDC_DELBTN), 1);
ListViewGetSpecItem(hList, 11, 1, szBuf);
if (*szBuf)
EnableWindow(GetDlgItem(hDlg, IDC_COPYPATHBTN), 1);
}
else
{
EnableWindow(GetDlgItem(hDlg, IDC_DELBTN), 0);
EnableWindow(GetDlgItem(hDlg, IDC_COPYPATHBTN), 0);
};
};
};
break;
case IDC_TREE1:
{
if (pnmh->code == TVN_SELCHANGED)
{
TVITEM tvItem = {0};
NMTREEVIEW *pnmhTree = (NMTREEVIEW*)lParam;
TreeViewGetSelectText(GetDlgItem(hDlg, IDC_TREE1),
(NMHDR*)lParam, &tvItem);
if (tvItem.pszText)
{
char szData[LINE_LEN] = {0};
memcpy(szData, tvItem.pszText, strlen(tvItem.pszText));
ListViewRemoveAllItems(GetDlgItem(_hDlg, IDC_LIST1));
ListViewRemoveAllItems(GetDlgItem(_hDlg, IDC_LIST2));
SetCharSet(IDC_LIST1, IDC_LIST2);
FindDeviceName(szData, IDC_LIST1, IDC_LIST2);
};
};
};
break;
};
};
break;
};
return 0;
};
int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hPrevInst,
LPSTR lpCmdLine, int nShowCmd)
{
InitCommonControls();
_hInst = hInst;
if (DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_DIALOG1),
0L, MainDialog, 0L) == -1)
ShowErrorMsg(0L, GetLastError(), "DialogBoxParam");
ExitProcess(0);
return 0;
};
Додаток Б - Лістинг програми GetTypeInfo.cpp
#include "gettypeinfo.h"
extern HWND _hDlg;
void ShowDevPropertyInfo(HWND hListView, char *szItemName,
char *szValue)
{
short wCount = ListViewGetItemCount(hListView);
char szTmp[64] = {0};
LVITEM lvItem = {0};
lvItem.iSubItem = 1;
lvItem.pszText = szTmp;
lvItem.cchTextMax = 63;
SendMessage(hListView, LVM_GETITEMTEXT, wCount-1, (LPARAM)&lvItem);
if (!*szTmp)
{
if (szItemName && szValue)
{
ListViewInsertItemText(hListView, wCount, 0, szItemName);
ListViewInsertItemText(hListView, wCount, 1, szValue);
}
else if (szItemName && !szValue)
ListViewInsertItemText(hListView, wCount, 0, szItemName);
else if (!szItemName && szValue)
ListViewInsertItemText(hListView, wCount-1, 1, szValue);
}
else
{
if (szItemName)
ListViewInsertItemText(hListView, wCount, 0, szItemName);
else
ListViewInsertItemText(hListView, wCount, 0, "");
if (szValue)
ListViewInsertItemText(hListView, wCount, 1, szValue);
};
};
void GetMoreInformation(HDEVINFO hDevInfo, SP_DEVINFO_DATA spDevInfoData,
const UINT nIDList1)
{
HWND hListView = GetDlgItem(_hDlg, nIDList1);
GUID guid = {0};
short wCount = ListViewGetItemCount(hListView);
char bIsBIG5 = (GetACP() == 950) ? 1 : 0;
char szName[64] = {0};
DWORD dwAddr;
if (SetupDiGetDeviceRegistryProperty(hDevInfo, &spDevInfoData, SPDRP_BUSNUMBER, 0L,
(PBYTE)&dwAddr, //szName, 63, 0))
{
sprintf(szName, "%X", dwAddr);
wCount = ListViewGetItemCount(hListView);
ListViewInsertItemText(hListView, wCount, 0, "BUS номер");
ListViewInsertItemText(hListView, wCount, 1, szName);
};
if (SetupDiGetDeviceRegistryProperty(hDevInfo,
&spDevInfoData,
SPDRP_CAPABILITIES,
0L, (PBYTE)&dwAddr, 63, 0))
{
if (dwAddr)
{
ShowDevPropertyInfo(hListView, "Можливості", 0L);
if (dwAddr & CM_DEVCAP_LOCKSUPPORTED)
ShowDevPropertyInfo(hListView, 0L, "LockSupported");
if (dwAddr & CM_DEVCAP_EJECTSUPPORTED)
ShowDevPropertyInfo(hListView, 0L, "EjectSupported");
if (dwAddr & CM_DEVCAP_REMOVABLE)
ShowDevPropertyInfo(hListView, 0L, "Removable");
if (dwAddr & CM_DEVCAP_DOCKDEVICE)
ShowDevPropertyInfo(hListView, 0L, "DockDevice");
if (dwAddr & CM_DEVCAP_UNIQUEID)
ShowDevPropertyInfo(hListView, 0L, "UniqueID");
if (dwAddr & CM_DEVCAP_SILENTINSTALL)
ShowDevPropertyInfo(hListView, 0L, "SilentInstall");
if (dwAddr & CM_DEVCAP_RAWDEVICEOK)
ShowDevPropertyInfo(hListView, 0L, "RawDeviceOK");
if (dwAddr & CM_DEVCAP_SURPRISEREMOVALOK)
ShowDevPropertyInfo(hListView, 0L, "SurpriseRemovalOK");
if (dwAddr & CM_DEVCAP_HARDWAREDISABLED)
ShowDevPropertyInfo(hListView, 0L, "HardwareDisabled");
if (dwAddr & CM_DEVCAP_NONDYNAMIC)
ShowDevPropertyInfo(hListView, 0L, "NonDynamic");
};
};
if (SetupDiGetDeviceRegistryProperty(hDevInfo,
&spDevInfoData,
SPDRP_CHARACTERISTICS,
0L,
(PBYTE)&dwAddr, //szName,
63,
0))
{
if (dwAddr)
{
ShowDevPropertyInfo(hListView, "Ознака", 0L);
if (dwAddr & FILE_DEVICE_SECURE_OPEN)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_SECURE_OPEN");
if (dwAddr & FILE_FLOPPY_DISKETTE)
ShowDevPropertyInfo(hListView, 0L, "FLOPPY_DISKETTE");
if (dwAddr & FILE_READ_ONLY_DEVICE)
ShowDevPropertyInfo(hListView, 0L, "READ_ONLY_DEVICE");
if (dwAddr & FILE_REMOVABLE_MEDIA)
ShowDevPropertyInfo(hListView, 0L, "REMOVABLE_MEDIA");
if (dwAddr & FILE_WRITE_ONCE_MEDIA)
ShowDevPropertyInfo(hListView, 0L, "WRITE_ONCE_MEDIA");
if (dwAddr & FILE_REMOTE_DEVICE)
ShowDevPropertyInfo(hListView, 0L, "REMOTE_DEVICE");
if (dwAddr & FILE_DEVICE_IS_MOUNTED)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_IS_MOUNTED");
if (dwAddr & FILE_VIRTUAL_VOLUME)
ShowDevPropertyInfo(hListView, 0L, "VIRTUAL_VOLUME");
if (dwAddr & FILE_AUTOGENERATED_DEVICE_NAME)
ShowDevPropertyInfo(hListView, 0L, "AUTOGENERATED_DEVICE_NAME");
};
};
if (SetupDiGetDeviceRegistryProperty(hDevInfo,
&spDevInfoData,
SPDRP_DEVTYPE,
0L,
(PBYTE)&dwAddr, //szName,
63,
0))
{
if (dwAddr)
{
ShowDevPropertyInfo(hListView, "Тип пристрою", 0L);
if (dwAddr & FILE_DEVICE_BEEP)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_BEEP");
if (dwAddr & FILE_DEVICE_CD_ROM)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_CD_ROM");
if (dwAddr & FILE_DEVICE_CD_ROM_FILE_SYSTEM)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_CD_ROM_FILE_SYSTEM");
if (dwAddr & FILE_DEVICE_CONTROLLER)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_CONTROLLER");
if (dwAddr & FILE_DEVICE_DATALINK)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_DATALINK");
if (dwAddr & FILE_DEVICE_DFS)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_DFS");
if (dwAddr & FILE_DEVICE_DISK)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_DISK");
if (dwAddr & FILE_DEVICE_DISK_FILE_SYSTEM)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_DISK_FILE_SYSTEM");
if (dwAddr & FILE_DEVICE_FILE_SYSTEM)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_FILE_SYSTEM");
if (dwAddr & FILE_DEVICE_INPORT_PORT)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_INPORT_PORT");
if (dwAddr & FILE_DEVICE_KEYBOARD)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_KEYBOARD");
if (dwAddr & FILE_DEVICE_MAILSLOT)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_MAILSLOT");
if (dwAddr & FILE_DEVICE_MIDI_IN)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_MIDI_IN");
if (dwAddr & FILE_DEVICE_MIDI_OUT)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_MIDI_OUT");
if (dwAddr & FILE_DEVICE_MOUSE)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_MOUSE");
if (dwAddr & FILE_DEVICE_MULTI_UNC_PROVIDER)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_MULTI_UNC_PROVIDER");
if (dwAddr & FILE_DEVICE_NAMED_PIPE)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_NAMED_PIPE");
if (dwAddr & FILE_DEVICE_NETWORK)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_NETWORK");
if (dwAddr & FILE_DEVICE_NETWORK_BROWSER)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_NETWORK_BROWSER");
if (dwAddr & FILE_DEVICE_NETWORK_FILE_SYSTEM)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_NETWORK_FILE_SYSTEM");
if (dwAddr & FILE_DEVICE_NULL)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_NULL");
if (dwAddr & FILE_DEVICE_PARALLEL_PORT)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_PARALLEL_PORT");
if (dwAddr & FILE_DEVICE_PHYSICAL_NETCARD)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_PHYSICAL_NETCARD");
if (dwAddr & FILE_DEVICE_PRINTER)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_PRINTER");
if (dwAddr & FILE_DEVICE_SCANNER)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_SCANNER");
if (dwAddr & FILE_DEVICE_SERIAL_MOUSE_PORT)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_SERIAL_MOUSE_PORT");
if (dwAddr & FILE_DEVICE_SERIAL_PORT)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_SERIAL_PORT");
if (dwAddr & FILE_DEVICE_SCREEN)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_SCREEN");
if (dwAddr & FILE_DEVICE_SOUND)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_SOUND");
if (dwAddr & FILE_DEVICE_STREAMS)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_STREAMS");
if (dwAddr & FILE_DEVICE_TAPE)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_TAPE");
if (dwAddr & FILE_DEVICE_TAPE_FILE_SYSTEM)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_TAPE_FILE_SYSTEM");
if (dwAddr & FILE_DEVICE_TRANSPORT)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_TRANSPORT");
if (dwAddr & FILE_DEVICE_UNKNOWN)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_UNKNOWN");
if (dwAddr & FILE_DEVICE_VIDEO)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_VIDEO");
if (dwAddr & FILE_DEVICE_VIRTUAL_DISK)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_VIRTUAL_DISK");
if (dwAddr & FILE_DEVICE_WAVE_IN)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_WAVE_IN");
if (dwAddr & FILE_DEVICE_WAVE_OUT)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_WAVE_OUT");
if (dwAddr & FILE_DEVICE_8042_PORT)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_8042_PORT");
if (dwAddr & FILE_DEVICE_NETWORK_REDIRECTOR)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_NETWORK_REDIRECTOR");
if (dwAddr & FILE_DEVICE_BATTERY)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_BATTERY");
if (dwAddr & FILE_DEVICE_BUS_EXTENDER)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_BUS_EXTENDER");
if (dwAddr & FILE_DEVICE_MODEM)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_MODEM");
if (dwAddr & FILE_DEVICE_VDM)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_VDM");
if (dwAddr & FILE_DEVICE_MASS_STORAGE)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_MASS_STORAGE");
if (dwAddr & FILE_DEVICE_SMB)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_SMB");
if (dwAddr & FILE_DEVICE_KS)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_KS");
if (dwAddr & FILE_DEVICE_CHANGER)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_CHANGER");
if (dwAddr & FILE_DEVICE_SMARTCARD)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_SMARTCARD");
if (dwAddr & FILE_DEVICE_ACPI)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_ACPI");
if (dwAddr & FILE_DEVICE_DVD)
ShowDevPropertyInfo(hListView, 0L, "FILE_DEVICE_DVD");
if (dwAddr & FILE_DEVICE_FULLSCREEN_VIDEO)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_FULLSCREEN_VIDEO");
if (dwAddr & FILE_DEVICE_DFS_FILE_SYSTEM)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_DFS_FILE_SYSTEM");
if (dwAddr & FILE_DEVICE_DFS_VOLUME)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_DFS_VOLUME");
if (dwAddr & FILE_DEVICE_SERENUM)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_SERENUM");
if (dwAddr & FILE_DEVICE_TERMSRV)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_TERMSRV");
if (dwAddr & FILE_DEVICE_KSEC)
ShowDevPropertyInfo(hListView, 0L, "DEVICE_KSEC");
};
};
if (SetupDiGetDeviceRegistryProperty(hDevInfo,
&spDevInfoData,
SPDRP_DRIVER,
0L,
(PBYTE)szName,
63,
0))
{
ShowDevPropertyInfo(hListView, "Драйвер", szName);
};
if (SetupDiGetDeviceRegistryProperty(hDevInfo,
&spDevInfoData,
SPDRP_ENUMERATOR_NAME,
0L,
(PBYTE)szName,
63,
0))
{
ShowDevPropertyInfo(hListView, "Лічильник", szName);
};
if (SetupDiGetDeviceRegistryProperty(hDevInfo,
&spDevInfoData,
SPDRP_HARDWAREID,
0L,
(PBYTE)szName,
63,
0))
{
char *p = szName;
ShowDevPropertyInfo(hListView, "Ідентифікатор обладнання", 0L);
while (*p)
{
ShowDevPropertyInfo(hListView, 0L, p);
p = strchr(p, 0);
*p++;
};
};
if (SetupDiGetDeviceRegistryProperty(hDevInfo,
&spDevInfoData,
SPDRP_LOCATION_INFORMATION,
0L,
(PBYTE)szName,
63,
0))
{
ShowDevPropertyInfo(hListView, "Локальна інформація", szName);
};
if (SetupDiGetDeviceRegistryProperty(hDevInfo,
&spDevInfoData,
SPDRP_LOWERFILTERS,
0L,
(PBYTE)szName,
63,
0))
{
ShowDevPropertyInfo(hListView, "Lower Filter", szName);
};
if (SetupDiGetDeviceRegistryProperty(hDevInfo,
&spDevInfoData,
SPDRP_UPPERFILTERS,
0L,
(PBYTE)szName,
63,
0))
{
ShowDevPropertyInfo(hListView, "Upper Filter", szName);
};
if (SetupDiGetDeviceRegistryProperty(hDevInfo,
&spDevInfoData,
SPDRP_PHYSICAL_DEVICE_OBJECT_NAME,
0L,
(PBYTE)szName,
63,
0))
{
ShowDevPropertyInfo(hListView, "Фізичне імя обєкту пристрою", szName);
};
if (SetupDiGetDeviceRegistryProperty(hDevInfo,
&spDevInfoData,
SPDRP_SERVICE,
0L,
(PBYTE)szName,
63,
0))
{
char *p = szName;
ShowDevPropertyInfo(hListView, "Ім'я служби", 0L);
if (*p)
GetDriverName(GetDlgItem(_hDlg, nIDList1), szName);
while (*p)
{
ShowDevPropertyInfo(hListView, 0L, p);
p = strchr(p, 0);
*p++;
while (strchr(p, '\\'))
{
p = strchr(p, 0);
*p++;
};
};
};
};
void GetDriverName(HWND hListView, const char *szServiceName)
{
HKEY hKey = 0L;
char szSubKey[128] = {"SYSTEM\\CurrentControlSet\\Services\\\0"};
char szPath[MAX_PATH] = {0};
DWORD cbData;
DWORD dwType;
DWORD dwStart;
strcat(szSubKey, szServiceName);
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,
szSubKey,
0,
KEY_ALL_ACCESS,
&hKey) != ERROR_SUCCESS)
{
ListViewInsertItemText(hListView, 9, 1, "N/A");
ListViewInsertItemText(hListView, 12, 1, "N/A");
ListViewInsertItemText(hListView, 13, 1, "N/A");
return;
};
cbData = MAX_PATH-1;
dwType = REG_EXPAND_SZ;
if (RegQueryValueEx(hKey, "ImagePath", 0L,
&dwType, (unsigned char*)szPath,
&cbData) != ERROR_SUCCESS)
ListViewInsertItemText(hListView, 9, 1, "N/A");
else
{
char szRoot[MAX_PATH] = {0};
GetWindowsDirectory(szRoot, MAX_PATH-1);
strcat(szRoot, "\\");
strcat(szRoot, szPath);
ListViewInsertItemText(hListView, 9, 1, szRoot);
};
RtlZeroMemory(szPath, MAX_PATH);
cbData = MAX_PATH-1;
dwType = REG_SZ;
if (RegQueryValueEx(hKey, "Group", 0L,
&dwType,
(unsigned char*)szPath,
&cbData) != ERROR_SUCCESS)
ListViewInsertItemText(hListView, 12, 1, "N/A");
else
ListViewInsertItemText(hListView, 12, 1, szPath);
dwStart = 0;
cbData = sizeof(DWORD);
dwType = REG_DWORD;
if (RegQueryValueEx(hKey, "Start", 0L,
&dwType,
(unsigned char*)&dwStart,
&cbData) != ERROR_SUCCESS)
ListViewInsertItemText(hListView, 13, 1, "N/A");
else
{
switch(dwStart)
{
case SERVICE_BOOT_START:
strcpy(szPath, "BOOT START");
break;
case SERVICE_SYSTEM_START:
strcpy(szPath, "SYSTEM START");
break;
case SERVICE_AUTO_START:
strcpy(szPath, "AUTO START");
break;
case SERVICE_DEMAND_START:
strcpy(szPath, "DEMAND START");
break;
case SERVICE_DISABLED:
strcpy(szPath, "DISABLED");
break;
};
ListViewInsertItemText(hListView, 13, 1, szPath);
};
RegCloseKey(hKey);
};
Размещено на Allbest.ru
Подобные документы
Розробка ігрового додатку за технологією IDE Visual Studio та WPF. Опис вхідної та вихідної інформації. Назва та призначення модулів програми. Основні поля класу, необхідні для ігрової логіки. Блок-схема алгоритму гри. Інструкція з експлуатації системи.
курсовая работа [1,3 M], добавлен 02.06.2015Опис методів і алгоритмів вирішення задачі в середовищі розробки Myeclipse. Основні функції програмного продукту, його структура. Розробка алгоритму та програми, інструкція користувачу. Результати тестування, лістинг основних блоків. Вікно головного меню.
курсовая работа [1,8 M], добавлен 24.02.2014Головні принципи візуального програмування, опис компонентів Delphi, використаних при розробці проекту. Опис програми-додатку "Психологічний тест" та список дій користувача. Алгоритм роботи програми, її форма та ієрархія. Опис графічного інтерфейсу.
курсовая работа [1,2 M], добавлен 08.06.2010Розробка програми для моделювання роботи алгоритму Дейкстри мовою C# з використанням об’єктно-орієнтованих принципів програмування. Алгоритм побудови робочого поля. Програмування графічного інтерфейсу користувача. Тестування програмного забезпечення.
курсовая работа [991,4 K], добавлен 06.08.2013Принципи роботи команд мікросхеми 24LC08: читання, запису даних. Опис і блок-схеми програми і підпрограм, що обслуговує пристрій. Вибір середовища програмування і розробка програми, яка забезпечує можливість демонстрації команд. Проведення тестування.
курсовая работа [114,2 K], добавлен 08.12.2011Особливості системи онлайн-агрегаторів новин, універсальної програмної платформи Microsoft Window. Використання мови програмування C#, створення бази даних. Розробка програмного продукту, алгоритм його створення. Вихідний код та інструкція користувача.
дипломная работа [730,9 K], добавлен 21.01.2016Створення схеми електричної принципової МР-3 програвача – приставки до ПК, структурної та загальної схеми. Призначення проектуємого пристрою. Принцип роботи окремих ВІС. Розробка програми тестування роботи пристрою, розрахунок надійності його роботи.
курсовая работа [527,4 K], добавлен 24.03.2009Розробка програми для вирішення графічної задачі. При вирішенні задачі необхідно cтворювати програму у середовищі програмування Turbo Pascal. Розробка алгоритму функціонування програми і надання блок-схеми алгоритму. Демонстрація роботи програми.
курсовая работа [1,3 M], добавлен 23.06.2010Розробка програмного додатку - гри "Jump way", яка поєднала в собі сучасні методи побудови 2D ігор. Обґрунтування вибору мови програмування. Проектування UML-діаграм класів. Користувацький інтерфейс. Програмна реалізація гри. Інструкція користувача.
курсовая работа [1,2 M], добавлен 09.01.2017Побудування блок-схеми рішення завдання зі знайдення центра ваги однорідної усіченої призми. Розробка програми за допомогою язика програмування C++, опис змінних та функцій програми та загальної математичної моделі. Розробка інструкції користувача.
курсовая работа [1,1 M], добавлен 04.01.2012