Курсовая работа (т): Створення програми, яка дозволяє запускати процеси, використовуючи для цього вибрані на диску файли

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Створення програми, яка дозволяє запускати процеси, використовуючи для цього вибрані на диску файли

РЕФЕРАТ

Курсова робота: 30 с., 4 рис., 6 джерел, 1 додатки.

Варіант

Завдання Написати програму, яка дозволяє запускати процеси, використовуючи для цього вибрані на диску файли. Користувач може задавати ім'я запускається файлу і командний рядок. Програма стежить за всіма запущеними нею процесами і виводить на вимогу користувача наступну інформацію: ім'я процесу, значення покажчика та ідентифікатора процесу, час виконання процесу.

Мета роботи - отримати навички коректного використання операторів та конструкцій та побудова ефективних алгоритмів для розв’язку задачі.

Одержані висновки: розроблені алгоритми та складені програми для обробки графічних зображень.

Зміст

Вступ

. Теоретична частина

.1 Основи розробки додатків Windows

.2 Головна функція WinMain

.3 Параметри функції WinMain

.4 Склад функції WinMain()

. Практична частина

.1 Постановка задачі

.2 Запуск процесу, використання для цього вибраних на диску файлів

.3 Відслідковування кожного з процесів (його статус, назву, час життя)

.4 Відслідковування діяльності користувача

.5 Інші функції, використані в програмі

.6 Опис алгоритму роботи програми

Висновок

Список використаних джерел

Додаток А

Вступ

API спроектований для використання в мові Сі для написання прикладних програм, призначених для роботи під управлінням операційної системи MS Windows.API являє собою безліч функцій, структур даних і числових констант, наступних угодами мови С. Всі мови програмування, здатні викликати такі функції і оперувати такими типами даних в програмах, що виконуються в середовищі Windows, можуть користуватися API.

Для полегшення програмування під Windows, в компанії Microsoft і сторонніми розробниками було зроблено безліч спроб створити бібліотеки і середовища програмування, частково або повністю приховують від програміста особливості Windows API, і надають ту чи іншу частину його можливостей у більш зручному вигляді. Є крос-платформні бібліотеки, такі як Qt, Tk. Вагома частина цих бібліотек сконцентрована на полегшенні програмування графічного інтерфейсу користувача.

Функціонально Win32 API підрозділяється на наступні категорії:

-       Network Services (мережеві сервіси);

-       Base Services (базові сервіси);

-       Graphics Device Interface (інтерфейс графічних пристроїв);

-       Common Control Library (бібліотека спільних елементів управління);

-       User Interface (інтерфейс користувача);

-       Windows NT Access Control (управління доступом для Windows NT);

-       Windows Shell (оболонка Windows);

-       Windows System Information (інформація про систему).

Щоб зробити інтерфейс Win32 АРI більш незалежним від конкретної мови програмування або більш відповідним апаратному забезпеченню комп'ютера, розробники цього інтерфейсу визначили нові прості типи даних. Ці типи даних використовуються в прототипах функцій інтерфейсу Win32 АРI. Нові прості типи даних визначені як синоніми простих типів даних мови програмування С. Щоб відрізняти ці типи від інших типів, їх імена визначені прописними буквами.

. Теоретична частина

.1 Основи розробки додатків Windows

Програма починається з двох директив препроцесора #include, за допомогою яких до програми підключаються заголовні файли. Заголовки WINDOWS.H забезпечує розуміння компілятором сенсу типів даних Windows, констант і макросів і підключення цього файлу до вихідного тексту програми є обов'язковим. Частина визначень, що використовуються в програмах міститься у файлі WINDOWS.H, який також необхідно включати практично в усі додатки Windows.

Слідом за операторами препроцесора йде розділ прототипів, де визначається прототип єдиною в даній програмі прикладної функції WndProc. Но загально в програмі обов'язково повинні бути вказані прототипи всіх використовуваних функцій, як прикладних, так і системних. Викликів системних функцій Windows багато: RégisterCIass(), CreateWindowQ, GetMessage () та ін. Однак прототипи всіх цих функцій вже визначені в заголовних файлах системи програмування. Так, прототип функції WinMain описаний у файлі WINBASE.H:

Заголовок функції WinMain () в програмі в точності відповідає прототипу. Прототипи інших використаних в програмі функцій Windows визначені у файлі WINUSER.H. Таким чином, про прототипи функцій Windows можна не піклуватися.

Інше становище з віконною функцією WndProc (). Це прикладна функція, її ім'я може бути яким завгодно, і системі програмування це ім'я невідоме.

При наявності в додатку декількох вікон в програмі описується кілька віконних функцій, по одній для кожного класу вікон. Для всіх використовуваних в програмі віконних функцій необхідно вказувати їх прототипи.

З іншого боку, формат віконної функції, тобто кількість і типи вхідних параметрів функції, як і тип повертається нею значення, визначені системою Windows і не можуть бути довільно змінені. Віконна функція визивається з Windows при вступі у додаток того чи іншого повідомлення. При її виклику Windows передає їй цілком певний список параметрів, і функція повинна мати можливість ці параметри прийняти і працювати з ними. Тому в інтерактивному довіднику системи програмування дається шаблон (template) віконної функції, який за своїм виглядом дуже схожий на прототип, однак є не прототипом конкретної функції, а заготівлею для програміста:

У файлі WINDEF.H символічне позначення CALLBACK оголошується рівнозначним ключовим словом мови C ++ stdcall, яке визначає правила взаємодії функцій з зухвалими процедурами. У Win32 практично для всіх функцій діє так звана угода стандартного виклику. Ця угода визначає, що при виклику функції її параметри поміщаються в стек в такому порядку, що в глибині стека виявляється останній параметр, а на вершині - перший. Сама функція знає при якому розташуванні її параметрів і вибирає їх з стека в правильній послідовності. Для 16-розрядних функцій Windows діє угода мови Паскаль, при якому порядок приміщення параметрів в стек зворотний.

Функціонування додатки Windows

Програма складається з двох функцій: головної функції, завжди має ім'я WinMain, і так званої віконної функції (віконної процедури) WndPгoc. При запуску програми Windows управління завжди передається функції WinMain, яка, таким чином, має бути присутня у будь-якій програмі. Більше того, ця функція, маючи в принципі циклічний характер, виконується протягом всього життя додатки. Основне призначення функції WinMain - виконання ініціюючих дій і організація циклу виявлення повідомлень.

Ініціюючі дії, що виконуються у функції WinMain(), полягають у реєстрації класу головного вікна, створенні цього вікна і його показі, тобто виведенні на робочій стіл Windows. Ці дії здійснюються викликом відповідних функцій Windows: RegisterClass(), CгeateWindow () і ShowWindow ().

Виконавши необхідні ініціалізували дії, головна функція WinMain() входить в нескінченний цикл виявлення повідомлень. Завдання функції WinMain полягає в прийомі цього повідомлення і передачі його друга найважливішого компоненту будь-якого додатку Windows - віконної функції.

Функція GetMessage () аналізує чергу повідомлень додатка. Якщо в черзі виявляється повідомлення, GetMessage вилучає його з черги і передає в додаток. Виконувана далі функція DispatchMessage () викликає віконну функцію, передаючи їй всі дані, що входять до повідомлення.

Віконна функція складається з стількох фрагментів, скільки конкретних повідомлень передбачається обробляти в цьому додатку. Якщо, наприклад, додаток повинен відслідковувати координати миші, то у віконну функцію слід включити фрагмент обробки повідомлень про переміщення миші; якщо, крім цього, програма має реагувати на сигнали від таймера, у віконну функцію включається фрагмент обробки повідомлень від таймера. Всі інші повідомлення, які можуть надійти в додаток, але які нас не цікавлять, передаються функції Windows DefWindowProc (), яка виконує мінімально необхідну обробку будь-яких повідомлень.

У програмі не передбачено виконання будь-яких прикладних дій; користувач може тільки змінювати за допомогою миші розміри вікна, переміщати його по робочому столу або, натиснувши на кнопку з хрестиком, завершити додаток. З іншого боку, всі елементи програми входять з тими чи іншими варіаціями практично в будь-який додаток Windows.

.2 Головна функція WinMain

Головна функція додатка WinMain() починається з визначення змінних, які будуть використовуватися в програмі. У програмах для Windows часто включають в ім'я кожної змінної ще й інформацію про її типі. Це робиться за допомогою так званої угорської нотації.

Суть угорської нотації полягає в тому, що ім'я змінної або функції передує однією або декількома буквами - префіксом, що говорить про тип цієї змінної. Так, префікс п позначає цілочисельну змінну, sz- символьний рядок, що закінчується двійковим нулем, h - дескриптор того чи іншого об'єкта. Звідси і взялися кілька незграбні на перший погляд імена змінних szClassName і szTitle. Угорська система широко використовується в описах внутрішніх структур Windows. Так, у структурі типу WNDCLASS, з якою має справу функція Register (), є члени IpszClassName (Ipsz - long pointer string zero, далекий покажчик на символьний рядок), IpfhWndProc (Ipfn - long pointer function, далекий покажчик на функцію), hlcon (h - handle, дескриптор) та ін.

.3 Параметри функції WinMain

Викликаючи функцію WinMain(), Windows передає їй 4 обумовлених аргументу, які, вступаючи у функцію WinMain(), стають її внутрішніми локальними параметрами.

Перший параметр типу HISTANCE, якому для стислості дано ім'я hInst являє собою дескриптор даного екземпляра додатка. Він призначається додатку при його запуску системою Windows і служить для його ідентифікації. Багато функцій Windows використовують цей дескриптор в якості вхідного параметра, тому необхідно зберігати його в глобальній змінній, щоб зробити доступним всіх функцій програми.

Другий параметр того ж типу, який в документації названий hPrevInstance, в 16-розрядних додатках був дескриптором попереднього примірника цього ж додатка і брав нульове значення, якщо додаток запускалося в декількох екземплярах. Аналізуючи значення параметра hPrevInstance, можна було визначити, чи є даний екземпляр додатку першим. В Win32 цей параметр завжди дорівнює нулю і не має сенсу. Відповідно немає необхідності передбачати для нього локальну змінну, тому в заголовку функції WinMain () зазначений тільки тип другого параметра (HINCTANCE), але немає позначення змінної.

Наступний параметр, lpzCmdLine, являє собою вказівник на рядок, що містить параметри командного рядка запуску програми, якщо воно запускалося через кнопку "Пуск 'і при його запуску крім імені програми були зазначені ще які-небудь параметри.

Останній параметр, nCmdShow, характеризує режим запуску. Режим запуска будь-якої програми можна встановити, якщо, створивши ярлик програми, відкрити для нього вікно "Властивості", перейти на вкладку "Ярлик" і розкрити список "Вікно". Якщо, далі, вибрати в цьому списку пункт "Згорнуте в значок", Windows, запускаючи додаток, буде згортати його в піктограму. У цьому випадку з Windows в WinMain поступає значення параметру SW_SHOWMlNNOACTIVE = 7. Якщо ж включений режим Стандартний розмір, вікно додатку на екрані розгортається до розміру, заданого в самому додатку, а в WinMain() надходить константа SWSHOWNORMALH. Отриману через параметр nCmdShow константу можна потім використовувати як параметр при виклику функції Windows ShowWindow.

Внутрішні, діючі в програмі імена для параметрів функції WinMain, як і в принципі для будь-якої іншої функції, користувач може вибирати на свій розсуд.

.4 Склад функції WinMain()

У типовому додатку Windows головна функція WinMain() повинна виконати щонайменше 3 важливі процедури:

         Зареєструвати в системі Windows клас головного вікна. Якщо крім головного вікна планується виводити на екран внутрішні, породжені вікна, то їх класи також необхідно зареєструвати. Windows виводить на екран і обслуговує тільки зареєстровані вікна.

         Створити головне вікно і показати його на екрані. Породжені вікна також необхідно створити, хоча це можна зробити і пізніше, і не обов'язково у функції WinMain().

         Організувати цикл виявлення повідомлень, що надходять в додаток, а також додаток повідомлень. Запущене застосування Windows зазвичай функціонує доти, поки користувач не подасть команду його завершення за допомогою системного меню або введенням команди Alt + F4. Ці дії призводять до завершеня головної функції і видаленню програми зі списку діючих завдань.

Клас вікна і його характеристики

Для виводу на екран будь-якого вікна, зокрема головного вікна програми, необхідно насамперед зареєструвати клас вікна, в якому задаються найбільш загальні характеристики всіх вікон даного класу. Ця дія виконується в першій частині функції WinMain ().

Дії з реєстрації класу вікна полягають у заповненні структури типу WNDCLASS, що служить для опису характеристик класу реєстрованого вікна, і визові потім функції Windows RegisterClass (), яка і виконує реєстрацію даного класу.

При заповненні структурної змінної типу WNDCLASS необхідно забезпечити нульове значення всіх елементів, яким не присвоюється конкретні значення. Нульове значення елемента структури позначає для Windows, що характеристики цього елемента повинні встановлюватися за замовчуванням. Це правило, до речі, характерно і для інших структур, що описують ті чи інші об'єкти Windows, наприклад для структури OPENFILENAME, що служить для виводу на екран стандартного діалогу Windows "Відкриття файлу", йди структури LOGFONT, що дозволяє створити шрифт необхідного начертання.

Можна не обнуляти структуру Msg явним чином, а скористатися тією обставиною, що глобальні змінні обнуляються автоматично. Якщо змінну wc розташувати перед функцією WinMain, то при завантаженні програми в пам'ять вона буде заповнена нулями і у виклику функції ZeroMemory не буде необхідності. Якщо деяка змінна потрібна тільки в конкретній функції, її краще оголосити всередині цієї функції і зробити тим самим локальної. Локалізація змінних зменшує витрату пам'яті і підвищує надійність програми. Так чи інакше, якийсь засіб обнулення використовувати необхідно; в іншому випадку структура виявиться заповненою "сміттям", що при запуску програми швидше за все призведе до драматичних наслідків.

Найбільш важливими для подальшого функціонування програми є три поля структурної змінної wc: hlnstance, де зберігається дескриптор даного додатку, IpszClassName, куди заноситься довільне ім'я, присвоєне нами вікнам даного класу (у нас це вікно єдине) і lpfhWndProc - ім'я віконної функції. Саме за допомогою структури WNDCLASS Windows, визначає адресу віконної функції, яку вона повинна викликати при вступі у вікно повідомлень. Поле IpszClassName заповнюється із змінної szClassName; визначеної на початку програми, а значення дескриптора додатки переноситься з параметра hlnst функції WinMain ().

Менш важливими в принциповому плані, але істотними для розумного поведіння додатки є поля hIcon, hCursor і hbrBackground, куди слід записати дескриптори піктограми, курсору і кисті, яка використовується для зафарбовування робочої області вікна.

Курсор відноситься до ресурсів Windows; ресурси зазвичай завантажуються з спеціально створеного файлу ресурсів за допомогою відповідних функцій Windows, зокрема LoadCursor(). В якості першого аргументу цих функцій вказується дескриптор додатки, в якому зберігається необхідний ресурс, а в якості другого - ім'я ресурсу. Однак можна обійтися і вбудованими ресурсами Windows. Для цього в якості першого аргументу цих функцій вказується NULL (зазвичай NULL на місці дескриптора додаток позначає саму систему Windows); другий аргумент треба вибрати зі списку вбудованих ресурсів Windows.

Іншим ресурсом Windows, вказуються у класі вікна, є піктограма. Як і курсор, піктограма може бути розроблена програмістом спеціально для цього додатка і зберігатися у файлі ресурсів застосування або в окремому файлі з розширенням ІСО.

Для того щоб додати додатку необхідну піктограму, треба при заповненні структурної змінної wc типу WNDCLASS завантажити дескриптор піктограми в елемент wc.hIcon. Для отримання дескриптора слід скористатися функцією LoadIcon().

Источник: https://www.bibliofond.ru/detail.aspx?id=871734