Клавіатурний шпигун

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Украинский
    ,
    Формат файла:
    MS Word
    235,97 Кб
  • Опубликовано:
    2016-04-01
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Клавіатурний шпигун

ЧЕРНІГІВСЬКИЙ НАЦІОНАЛЬНИЙ ТЕХНОЛОГІЧНИЙ УНІВЕРСИТЕТ

КОЛЕДЖ ТРАНСПОРТУ ТА КОМП’ЮТЕРНИХ ТЕХНОЛОГІЙ

Циклова комісія дисциплін професійної підготовки

спеціальностей 5.05010201 і 5.05010101

КУРСОВИЙ ПРОЕКТ

з системного програмування



Студента IV курсу,

Іванова В.А.

Керівник викладач Пирогова В.І.





м. Чернігів - 2016 рік

Зміст

Вступ

1. Загальні відомості

1.1 Позначення та назва програми

1.1.1 Програмне забезпечення, необхідне для її функціонування

1.1.2 Мови програмування, на яких написана програма

2. Функціональне призначення

2.1 Призначення програми

2.2 Функціональні обмеження на застосування

3. Опис логічної структури

3.1 Алгоритм програми

3.2 Методи та елементи, що використовуються

3.3 Структура програми з описом функцій складових частин і зв'язків між ними

3.4 Зв'язок програми з іншими програмами

4. Необхідні технічні засоби

4.1 Типи комп'ютерів та пристроїв, що використовуються при роботі програми

5. Виклик і завантаження

5.1 Способи виклику програми

5.2 Адреса завантаження програми

5.3 Відомості про використання оперативної пам'яті

5.4 Обсяг програми

6. Вхідні дані

6.1 Характер вхідних даних

6.2 Організація вхідних даних

6.3 Попередня підготовка вхідних даних

7. Вихідні дані

7.1 Характер вихідних даних

7.2 Організація вихідних даних

7.3 Формат, описання та спосіб кодування даних

8. Опис і тестування програми

Висновок

Список використаної літератури

Додаток А

Додаток В

Додаток С

Вступ


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

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

Основною метою курсового проектування є:

–       навчання та набуття навиків практичного застосування теоретичних знань для вирішення конкретних практичних задач;

–       розвиток творчого мислення, виявлення та формування професійних навиків студентів;

–       набуття навиків конструювання виробів, виконання розрахунків, письмового викладу технічних рішень та аналізу одержаних результатів;

–       закріплення, поглиблення та систематизація отриманих студентами в процесі навчання теоретичних знань з різних дисциплін;

–       набуття навиків узагальнення та аналізу результатів, отриманих іншими розробниками та дослідниками;

–       навчання та набуття студентами досвіду користування довідковою літературою і нормативними документами.

Мета курсового проектування з дисципліни "Основи програмування та алгоритмічні мови":

–       закріпити знання, одержані під час вивчення дисципліни "Основи програмування та алгоритмічні мови;

–       засвоїти основні етапи розробки програмних виробів;

–       набути навиків при оформлення документів на програмні вироби;

–       одержати практичні навички з розробки програм і програмних документів.

Постановка завдання

Завданням курсового проекту є розробити програму стеження за натиснутими клавішами клавіатури. Вхідні дані - інформація про коди натиснутих клавіш. Вихідні дані - текст відповідних натиснутих клавіш. Інформація по роботі програми не зберігається на запам’ятовуючих пристроях.

Програма повинна бути реалізована на довільну кількість записів.

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

1. Загальні відомості


1.1 Позначення та назва програми


Програма автоматизації роботи автостанції КТКТ ХХХХGG 00 13, дискове ім'я файлу Project1. cpp, після компіляції - Project1. exe.

 

1.1.1 Програмне забезпечення, необхідне для її функціонування

Для використання програми не треба специфічного програмного забезпечення. Для виконання приграми вистачає будь-якої ОС сімейства Windows та мінімальних системних частин комп’ютера.

 

1.1.2 Мови програмування, на яких написана програма

Програма написана мовою С в середовищі Borland C++ Builder. C++ Builder - програмний продукт, інструмент швидкої розробки додатків <https://uk.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%27%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D0%B0_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%B0> (RAD <https://uk.wikipedia.org/wiki/%D0%A8%D0%B2%D0%B8%D0%B4%D0%BA%D0%B0_%D1%80%D0%BE%D0%B7%D1%80%D0%BE%D0%B1%D0%BA%D0%B0_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B7%D0%B0%D0%B1%D0%B5%D0%B7%D0%BF%D0%B5%D1%87%D0%B5%D0%BD%D0%BD%D1%8F>), інтегроване середовище розробки <https://uk.wikipedia.org/wiki/%D0%86%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B5_%D1%81%D0%B5%D1%80%D0%B5%D0%B4%D0%BE%D0%B2%D0%B8%D1%89%D0%B5_%D1%80%D0%BE%D0%B7%D1%80%D0%BE%D0%B1%D0%BA%D0%B8> (IDE), система, яка використовується програмістами для розробки програмного забезпечення на мові програмування C++ <https://uk.wikipedia.org/wiki/C%2B%2B>.

Спочатку розроблявся компанією Borland Software <https://uk.wikipedia.org/wiki/Borland>, а потім її підрозділом CodeGear <https://uk.wikipedia.org/w/index.php?title=CodeGear&action=edit&redlink=1> [ru]  <https://ru.wikipedia.org/wiki/CodeGear>, який сьогодні належить компанії Embarcadero Technologies <https://uk.wikipedia.org/wiki/Embarcadero_Technologies>.++ Builder об'єднує в собі комплекс об'єктних бібліотек <https://uk.wikipedia.org/wiki/%D0%91%D1%96%D0%B1%D0%BB%D1%96%D0%BE%D1%82%D0%B5%D0%BA%D0%B0_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC> (STL <https://uk.wikipedia.org/wiki/Standard_Template_Library>, VCL <https://uk.wikipedia.org/wiki/Visual_Component_Library>, CLX <https://uk.wikipedia.org/wiki/CLX>, MFC <https://uk.wikipedia.org/wiki/MFC> та ін.), компілятор <https://uk.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D1%96%D0%BB%D1%8F%D1%82%D0%BE%D1%80>, зневаджувач <https://uk.wikipedia.org/wiki/%D0%97%D0%BD%D0%B5%D0%B2%D0%B0%D0%B4%D0%B6%D1%83%D0%B2%D0%B0%D1%87>, редактор коду <https://uk.wikipedia.org/wiki/%D0%A2%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D0%B8%D0%B9_%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%BE%D1%80> та багато інших компонентів. Цикл розробки аналогічний Delphi <https://uk.wikipedia.org/wiki/Embarcadero_Delphi>. Більшість компонентів, розроблених в Delphi, можна використовувати і в C++ Builder без модифікації, але зворотнє твердження не вірне.++ Builder містить інструменти, які за допомогою drag-and-drop <https://uk.wikipedia.org/wiki/Drag-and-drop> дійсно роблять розробку візуальною <https://uk.wikipedia.org/wiki/%D0%92%D1%96%D0%B7%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F>, спрощує програмування завдяки вбудованому WYSIWYG <https://uk.wikipedia.org/wiki/WYSIWYG>-редактору інтерфейсу <https://uk.wikipedia.org/w/index.php?title=%D0%A0%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%BE%D1%80_%D0%B3%D1%80%D0%B0%D1%84%D1%96%D1%87%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BA%D0%BE%D1%80%D0%B8%D1%81%D1%82%D1%83%D0%B2%D0%B0%D1%86%D1%8C%D0%BA%D0%BE%D0%B3%D0%BE_%D1%96%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D1%83&action=edit&redlink=1>

2. Функціональне призначення


2.1 Призначення програми


Програма стеження за натиснутими клавішами клавіатури належать до тієї групи програмних продуктів, які здійснюють контроль над діяльністю користувача персонального комп'ютера. Спочатку програмні продукти цього типу призначалися виключно для запису інформації про натиснення клавіш клавіатури, у тому числі і системних клавіш, в спеціалізований журнал реєстрації (Log-файл), який згодом вивчався людиною, що встановила цю програму. Log-файл міг відправлятися по мережі на мережевий диск, ftp сервер в мережі Інтернет, по E-mail і так далі. В наш час програмні продукти, що зберегли "по-старому" дану назву, виконують ще й багато додаткових функцій - це перехоплення інформації з вікон, перехоплення кліків миші, перехоплення буфера обміну, "фотографування" знімків екрану і активних вікон, ведення обліку всіх отриманих та відправлених Email, моніторинг файлової активності, моніторинг системного реєстру, моніторинг черги завдань, відправлених на принтер, перехоплення звуку з мікрофону та відеозображення з веб-камери, підключених до комп'ютера і так далі, тобто вони фактично відносяться до абсолютно іншого класу програмних продуктів, а саме до моніторингових програмних продуктів <https://uk.wikipedia.org/wiki/%D0%9C%D0%BE%D0%BD%D1%96%D1%82%D0%BE%D1%80%D0%B8%D0%BD%D0%B3%D0%BE%D0%B2%D1%96_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BD%D1%96_%D0%BF%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D0%B8>.

Наш проекти буде стежити за натисненням клавіш користувачем і відображати дані в вікні програми.

 

2.2 Функціональні обмеження на застосування


Функціональних обмежень на застосування програми немає.

клавіатурний шпигун алгоритм програма

Поняття алгоритму належить до підвалин математики <https://uk.wikipedia.org/wiki/%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0>. Обчислювальні процеси алгоритмічного характеру (як-то арифметичні дії над цілими числами <https://uk.wikipedia.org/wiki/%D0%A6%D1%96%D0%BB%D1%96_%D1%87%D0%B8%D1%81%D0%BB%D0%B0>, знаходження НСД <https://uk.wikipedia.org/wiki/%D0%9D%D0%B0%D0%B9%D0%B1%D1%96%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D1%81%D0%BF%D1%96%D0%BB%D1%8C%D0%BD%D0%B8%D0%B9_%D0%B4%D1%96%D0%BB%D1%8C%D0%BD%D0%B8%D0%BA> двох чисел тощо) відомі людству з глибокої давнини. Проте, чітке поняття алгоритму сформувалося лише на початку XX ст <https://uk.wikipedia.org/wiki/20_%D1%81%D1%82%D0%BE%D0%BB%D1%96%D1%82%D1%82%D1%8F>

Наша програма повинна мати чіткий, сформований алгоритм, який дозволить швидко працювати програмі і безперебійно оброблювати вхідні і вихідні дані.

Алгоритм нашої програми виглядає наступним чином:

.        Початок роботи програми. Запуск скомпільованого нами файлу.

2.      Ініціалізація об’єктів програми.

.        Запуск стеження

.        Вивід даних про стеження на екран

.        Заміна шрифта на рукописний

.        Припинення стеження

.        Кінець програми

Для кращого розуміння алгоритму програми складемо його блок-схему (див. рис. 3.1.1)

.

Рис. 3.1.1 Блок-схема програми

 

3.2 Методи та елементи, що використовуються


Для реалізації алгоритму програми використовуються стандартні методи та елементи середовища програмування Borland C++ Builder.

Опишемо основні елементи програми, що використовуються у нашій програмі:

1.      Memo

Компоненти Memo є вікном редагування багаторядкового тексту. Вони так само, як і вікно Edit, забезпечені багатьма функціями, властивими більшості редакторів. У них передбачені типові комбінації "гарячих" клавіш: Ctrl + C - копіювання виділеного тексту в буфер обміну Clipboard (команда Copy), Ctrl + X - вирізання виділеного тексту в буфер Clipboard (команда Cut), Ctrl + V - вставка тексту з буфера Clipboard у позицію курсору (команда Paste), Ctrl + Z - скасування останньої команди редагування.

У компоненті Memo формат (шрифт, його атрибути, вирівнювання) однаковий для всього тексту і визначається властивістю Font. Якщо ви збережете у файлі текст, введений або відредагований користувачем, то буде створений текстовий файл, який містить лише символи, і не містить елементів форматування. При подальшому читанні цього файлу в Memo формат буде визначатися поточним станом властивості Font компоненту Memo, а не тим, в якому форматі раніше вводився текст.

2.      Label

Для відображення різних написів на формі використовуються в основному компоненти Label, StaticText і Panel. Перші два з цих компонентів - мітки, спеціально призначені для відображення текстів. Основне призначення панелі Panel - компоновка компонентів у вікні форми, проте можна використовувати і для виведення текстів.

Тексти, які відображаються в компонентах, визначаються значенням їх властивості Caption. Його можна встановлювати в процесі проектування або задавати і змінювати програмно під час виконання програми. Наприклад:

Label1-> Caption = "Новий текст";

Властивість Caption має тип рядка AnsiString. При присвоєнні цього типу числової інформації відбувається її автоматичне перетворення в рядок. Тому ви можете безпосередньо здійснювати подібні присвоювання. Наприклад:

Label1-> Caption = 5.1;

Оператор призведе до появи в мітці напису "5,1". Але якщо ви хочете занести в мітку змішану інформацію, що складаються з рядків символів і чисел, ви повинні скористатися функціями FloatToStr і IntToStr, що переводять відповідно числа з плаваючою комою і цілі в рядок. Для формування тексту, що складається з декількох фрагментів, можна використовувати операцію "+", яка для рядків означає їх склеювання (конкатенацію). Наприклад, якщо в програмі є ціла змінна I, що відображає число співробітників деякої організації, то вивести в мітку Label1 інформацію про це можна оператором:-> Caption = "Число співробітників: " + IntToStr (I);

У всіх компонентах колір фону визначається властивістю Color, а колір напису подсвойством Color властивості Font. Якщо колір спеціально не задавати, то колір фону зазвичай зливається з кольором контейнера, що містить мітку, так що фон просто не помітний.

Для мітки Label колір і шрифт - єдино доступні елементи оформлення напису. Компоненти StaticText і Panel мають крім того властивість Border - Style, визначальне рамку тексту - бордюр. При стилі sbsNone мітка StaticText по виду не відрізняється від мітки Label. Ймовірно, якщо вже використовувати бордюр, то найбільш приємний стиль sbsSunken.

Компонент Panel крім властивості BorderStyle має ще властивості Bevellnner, BevelOuter, BevelWidth, BorderWidth, які надають багаті можливості оформлення напису. Таким чином, з точки зору оформлення виведеного тексту максимальні можливості дає Panel і мінімальні Label.

Розміщення всіх текстових компонентів на формі визначається, зокрема, властивостями Top, Left, Height, Width, Aline, спільними для всіх віконних компонентів. Ці властивості, що визначають координати компонента, його розміри і їх зміну при зміні користувачем розмірів батьківського компонента.

Розмір міток Label і StaticText визначається також властивістю AutoSize. Якщо ця властивість встановлено в true, то вертикальний і горизонтальний розміри компонента визначаються розміром напису. Якщо ж AutoSize одно false, то вирівнювання тексту всередині компонента визначається властивістю Alignment, яке дозволяє вирівнювати текст по лівому краю, правому краю або центру клієнтської області мітки. У панелі Panel також є властивість AutoSize, але воно не відноситься до розмірів написи Caption. Однак властивість вирівнювання Alignment працює і для панелі.

У мітці Label є властивість WordWrap - допустимість переносу слів довгою написи, що перевищує довжину компонента, на нову сходинку. Щоб такий перенос міг здійснюватися, треба встановити властивість WordWrap в true, властивість AutoSize в false (щоб розмір компоненту не визначався розміром напису) і зробити висоту компонента такий, щоб у ньому могло поміститися кілька рядків. Якщо WordWrap не встановлено у true при AutoSize рівному false, то довгий текст, що не міститься в рамці мітки, просто обрізається.

3. Button

Найпростішою і, мабуть, найбільш часто використовуваної кнопкою є кнопка Button, розташована на сторінці бібліотеки Standard. Рідше використовується кнопка BitBtn, знана, насамперед, можливістю відобразити на її поверхні зображення. Більшість властивостей, методів і подій у цих видів кнопок однакові.

Основне з точки зору зовнішнього вигляду властивість кнопки - Caption (напис). У написах кнопок можна передбачати використання клавіш прискореного доступу, виділяючи для цього один із символів напису. Перед символом, який повинен відповідати клавіші прискореного доступу, ставиться символ амперсанда "&". Цей символ не з'являється в написи, а наступний за ним символ виявляється підкресленим. Тоді користувач може замість клацання на кнопці натиснути в будь-який момент клавішу Alt спільно з клавішею виділеного символу.

Наприклад, якщо у вашому додатку є кнопка виконання якоїсь операції, ви можете задати її властивість Caption рівним "& Start". На кнопці цей напис буде мати вигляд "Start". І якщо користувач натисне клавіші Alt + S, то це буде еквівалентно клацанню на кнопці.

Основна подія будь кнопки - OnClick, що виникає при натисканні на ній. Саме в обробнику цієї події записуються оператори, які повинні виконуватися при клацанні користувача на кнопці. Крім цього є ще ряд подій, пов'язаних з різними маніпуляціями клавішами і кнопками миші. Писати обробник події OnClick треба, якщо ви не пов'язуєте властивістю Action дану кнопку з якимось дією.

Властивість Cancel, якщо встановити його в true, визначає, що натискання користувачем клавіші Esc буде еквівалентно клацанню на даній кнопці. Ця властивість доцільно ставити рівним true для кнопок Скасувати в різних діалогових вікнах, щоб можна було вийти з діалогу, клікнувши на цю кнопку або натиснувши клавішу Esc.

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

З методів, властивих кнопках, має сенс відзначити один - Click. Виконання цього методу еквівалентно клацанню на кнопці, тобто викликає подія кнопки OnClick. Цим можна скористатися, щоб продублювати якимись іншими діями користувача клацання на кнопці. Нехай, наприклад, ви хочете, щоб при натисканні користувачем клавіші з символом "С" або "з" в будь-який момент роботи з додатком виконувалися операції, передбачені в обробнику події OnClick кнопки Button1. Оскільки невідомо, який компонент буде натискатися у фокусі в момент цієї події, треба перехопити його на рівні форми. Такий перехоплення здійснюється, якщо встановити властивість форми KeyPreview = true. Тоді в обробнику події форми OnKeyPresss можна написати оператор:

if ( (Кеу == 'С') || (Кеу == 'з'))-> Click ();

Якщо користувач ввів символ "С" або "з", то в результаті буде виконаний обробник клацання кнопки Button1.

4.      Hook

Hook - це деяка точка в Microsoft Windows механізмі обробки повідомлень, де додаток може підключити підпрограму для спостереження за потоком повідомлень у системі та обробки повідомлень деяких типів до того, як вони потраплять в цільову віконну процедуру. Цей короткий огляд описує Windows hook-точки і пояснює, як використовувати їх у базується на Win32 прикладній програмі.точки мають тенденцію уповільнювати систему, тому що вони збільшують сумарний час обробки, за яке система повинна виконати її для кожного повідомлення. Ви повинні встановлювати hook-точку, тільки тоді, коли це необхідно і видаляти її якомога швидше.містить багато різних типів hook-точок; кожен тип надає доступ до різних видів Windows - механізму обробки повідомлень. Наприклад, прикладна програма може використовувати hook-точку WH_MOUSE, щоб відстежувати в потоці обміну повідомленнями повідомлення для миші.підтримує окремий ланцюжок hook-точок для кожного типу hook-точки. Ланцюжок hook-точок (hook chain) - список покажчиків на спеціальні, що визначаються програмою функції повторного виклику звані підключаються процедурами (hook procedure). Коли попадається повідомлення, який пов'язано зі специфічним типом hook-точки, Windows передає це повідомлення у кожну підключається процедуру, що спричинюється одну за одною в ланцюжку hook-точок. Дія, яку може вибрати подключаемая процедура, залежить від типу включеної hook-точки. Підключаються процедури для деяких типів hook-точок можуть тільки відстежувати повідомлення; інші можуть змінювати повідомлення або зупиняти їх просування по ланцюжку, не даючи досягати їм наступної подключаемой процедури або вікна призначення.

Підключаючі процедури (HOOK PROCEDURES)

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

Синтаксис

LRESULT CALLBACK HookProc

(nCode,wParam,lParam

)

HookProc - влучна - заступник для обумовленого програмою назви процедури.

Параметр nCode - код hook-точки, який підключається процедура використовує, щоб визначити дію на виконання. Значення коду hook-точки залежить від її типу; кожен тип має свій власний характерний набір кодів hook-точки. Значення параметрів wParam і lParam залежать від коду hook-точки, але вони зазвичай містять інформацію про повідомленні, яке було відправлено або передано.

Функція SetWindowsHookEx завжди встановлює підключається процедуру на початку ланцюжка hook-точок. Коли відбувається подія, яка контролюється нестандартним типом hook-точки, Windows викликає процедуру на початку ланцюжка hook-точок, пов'язану з hook-точкою. Кожна фільтр - процедура в ланцюжку вирішує, чи передати подія в наступну процедуру. Підключається процедура передає подія в наступну процедуру, шляхом виклику функції CallNextHookEx.

Зверніть увагу!, Що підключаються процедури для деяких типів hook-точок можуть тільки відстежувати повідомлення. Windows передає повідомлення в кожну фільтр - процедуру, незалежно від того, є чи немає нестандартні виклики процедури CallNextHookEx.

Підключається процедура може бути глобальною, контролюючи повідомлення для всіх потоків в системі, або вона може бути для конкретного потоку, контролюючи повідомлення тільки для окремого потоку. Глобальна фільтр - процедура може бути викликана стосовно до будь-якої прикладної програмі, так що процедура повинна бути в окремому модулі динамічно підключається бібліотеки (DLL). Конкретний потік викликає підключається процедуру тільки стосовно до пов'язаного потоку. Якщо прикладна програма встановлює фільтр - процедуру для одного зі своїх власних потоків, що підключається процедура може бути або в тому ж самому модулі, як інша частина коду програми, або в динамічно підключається бібліотеці (DLL). Якщо прикладна програма встановлює фільтр - процедуру для потоку іншої прикладної програми, процедура повинна бути в динамічно підключається бібліотеці (DLL). За більшою інформацією зверніться до статті. Бібліотеки Динамічної зв'язку.

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

 


3.3 Структура програми з описом функцій складових частин і зв'язків між ними


Структура програми являє собою набір функцій. Наша програми містить лише одну функцію:__fastcall TForm1:: Button1Click (TObject *Sender)

Функція викликається шляхом натиснення клавішою миші на кнопку Замінити, розміщеної у вікні програми. Під час виконання цієї функції ми здійснюємо зчитування тексту з поля для вводу, передаємо його в поле для виводу, змінюємо шрифт з друкованого на рукописний, виводимо рукописний текст.

 

3.4 Зв'язок програми з іншими програмами


Програма не має зв'язки з іншими програмами. Проте вона підключає під час виконання динамічно підключаєму бібліотеку DllProject. dll

4. Необхідні технічні засоби


4.1 Типи комп'ютерів та пристроїв, що використовуються при роботі програми


При роботі програми використовується IBM-сумісний комп'ютер. Будь-яких інших специфічних чи додаткових пристроїв програма не потребує

5. Виклик і завантаження


5.1 Способи виклику програми


Виклик програми виконується завантаженням на виконання файлу Project1. exe

 

5.2 Адреса завантаження програми


Адреса завантаження визначається операційною системою автоматично.

5.3 Відомості про використання оперативної пам'яті


Програма при роботі не ініціює запити на виділення оперативної пам’яті, крім тої, що виділена їй для роботи операційною системою.

 

5.4 Обсяг програми


Файл Project1. cpp має обсяг 2 Кб, файл Project1. exe - 484 Кб

6. Вхідні дані


6.1 Характер вхідних даних


Вхідні дані для роботи програми являють коди натиснених клавіш

 

6.2 Організація вхідних даних


Вхідні дані організовуються у вигляді кодів натиснених клавіш.

 

6.3 Попередня підготовка вхідних даних


Попередня підготовка вхідних даних не обов’язкова.

7. Вихідні дані


7.1 Характер вихідних даних


Вихідними даними є переведені в текст натиснення клавіш.

 

7.2 Організація вихідних даних


Вихідні дані організовані у вигляді тексту, що видає програма на екран.

 

7.3 Формат, описання та спосіб кодування даних


Текстові повідомлення, що виводяться на екран.

Тестування програмного забезпечення (англ.  <https://uk.wikipedia.org/wiki/%D0%90%D0%BD%D0%B3%D0%BB%D1%96%D0%B9%D1%81%D1%8C%D0%BA%D0%B0_%D0%BC%D0%BE%D0%B2%D0%B0> Software Testing) - це процес технічного дослідження, призначений для виявлення інформації про якість продукту відносно контексту, в якому він має використовуватись. Техніка тестування також включає як процес пошуку помилок <https://uk.wikipedia.org/wiki/%D0%91%D0%B0%D2%91> або інших дефектів, так і випробування програмних складових з метою оцінки. Може оцінюватись:

·              відповідність вимогам, якими керувалися проектувальники та розробники

·              правильна відповідь для усіх можливих вхідних даних

·              виконання функцій за прийнятний час

·              практичність

·              сумісність з програмним забезпеченням та операційними системами

·              відповідність задачам замовника.

Оскільки число можливих тестів навіть для нескладних програмних компонент практично нескінченне, тому стратегія тестування полягає в тому, щоб провести всі можливі тести з урахуванням наявного часу та ресурсів. Як результат програмне забезпечення (ПЗ) тестується стандартним виконанням програми з метою виявлення баґів <https://uk.wikipedia.org/wiki/%D0%91%D0%B0%D2%91> (помилок або інших дефектів).

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

Тестування може проводитись, як тільки створено виконуваний код (навіть частково завершено). Процес розробки <https://uk.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BB%D0%BE%D0%B3%D1%96%D1%8F_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F> зазвичай передбачає коли та як буде відбуватися тестування. Наприклад, при поетапному процесі, більшість тестів відбувається після визначення системних вимог і тоді вони реалізуються в тестових програмах. На противагу цьому, відповідно до вимог гнучкої розробки ПЗ <https://uk.wikipedia.org/wiki/%D0%93%D0%BD%D1%83%D1%87%D0%BA%D0%B0_%D1%80%D0%BE%D0%B7%D1%80%D0%BE%D0%B1%D0%BA%D0%B0_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B7%D0%B0%D0%B1%D0%B5%D0%B7%D0%BF%D0%B5%D1%87%D0%B5%D0%BD%D0%BD%D1%8F>, програмування і тестування часто відбувається одночасно.

Тестування - це одна з технік контролю якості, що включає в себе

·              Планування робіт (Test Management)

·              Проектування тестів (Test Design)

·              Виконання тестування (Test Execution)

·              Аналіз отриманих результатів (Test Analysis).

Верифікація (Verification)  <https://uk.wikipedia.org/wiki/%D0%92%D0%B5%D1%80%D0%B8%D1%84%D1%96%D0%BA%D0%B0%D1%86%D1%96%D1%8F_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B7%D0%B0%D0%B1%D0%B5%D0%B7%D0%BF%D0%B5%D1%87%D0%B5%D0%BD%D0%BD%D1%8F> - це процес оцінки системи або її компонентів з метою визначити чи задовольняють результати поточного етапу розробки умовам, сформованим на початку цього етапу. Тобто чи виконуються цілі, терміни, завдання з розробки проекту, визначені на початку поточної фази. Валідація (Validation)  <https://uk.wikipedia.org/wiki/%D0%92%D0%B0%D0%BB%D1%96%D0%B4%D0%B0%D1%86%D1%96%D1%8F_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B7%D0%B0%D0%B1%D0%B5%D0%B7%D0%BF%D0%B5%D1%87%D0%B5%D0%BD%D0%BD%D1%8F> - це визначення відповідності розроблюваного програмного забезпечення між очікуваннями і потребами користувача, вимогам до системи.

План Тестування (Test Plan) - це документ, що описує весь обсяг робіт з тестування, починаючи з опису об'єкта, стратегії, розкладу, критеріїв початку і закінчення тестування, до необхідного в процесі роботи обладнання, спеціальних знань, а також оцінки ризиків з варіантами їх вирішення.

Тест дизайн (Test Design) - це етап процесу тестування програмного забезпечення, на якому проектуються і створюються тестові випадки (тест кейси), відповідно до визначених раніше критеріями якості та цілями тестування.

Тестовий випадок (Test Case) - це документ, що описує сукупність кроків, конкретних умов і параметрів, необхідних для перевірки реалізації тестованої функції або її частини.

Баг/Дефект Репорт (Bug Report) - це документ, що описує ситуацію або послідовність дій (Steps), що призвела до некоректної роботи об'єкта тестування (Misbehavior), із зазначенням причин та очікуваного результату (Expected Result).

Тестове Покриття (Test Coverage) - це одна з метрик оцінки якості тестування, що представляє із себе щільність покриття тестами вимог або коду, що виконується.

Деталізація Тест Кейсів (Test Case Specification) - це рівень деталізації опису тестових кроків і необхідного результату, при якому забезпечується розумне співвідношення часу проходження до тестового покриття.

Час Проходження Тест Кейса (Test Case Pass Time) - це час від початку проходження кроків тест кейса до отримання результату тесту.

Отже перейдемо до безпосередньої перевірки нашої програми на працездатність.

Для початку нам потрібно встановити наш проект на комп’ютер. Процес установки програми є стандартним, за допомогою майстра встановлення. (див. рис. 8.1)

Рис.8.1 Встановлення програми

Наша програма розпочинатиметься виводом на екран монітора комп’ютера головного вікна (див рис. 8.1).

Рис. 8.2 Головне вікно програми

 

Як видно з рисунку вище наша програма має наступний інтерфейс:

.        Один надпис призначений для інформування користувача про поле.

2.      Одне текстове поле призначене для виводу тексту.

.        Дві кнопки для запуску і припинення стеження

Отже, щоб здійснити стеження за натиснутими кнопками потрібно натиснути на кнопку Запустити і почати натискати клавіші клавіатури. Кожне натиснення програма буде фіксувати і виводити в полі виводу. (див. рис. 8.3)

Рис. 8.3 Перехвачення натиснутих клавіш

Для припинення стеження натискаємо кнопку Зупинити. Програма припинить стеження за клавішами і не буде виводити натиснення на екран

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

Для закриття нашої програми потрібно натиснути на хрестик в правому верхньому куті вікна програми.

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

Висновок


В ході виконання завдання курсової роботи мною було розроблено проект програми перехвату натиснених клавіш

Програма повноцінно працює при будь-яких вхідних даних і може бути впроваджена у виробництво і застосовуватись кінцевими користувачами.

Список використаної літератури


1.      Інформатика. Мова програмування С++. Спецкурс.10-12 класи. Навчальний посібник / Лєхан С.А. - Шепетівка, "Аспект", 2007 - 160 с.

2.      Об’єтно-орієнтоване програмування мовою С++, Навчальний посібник, Т. Є. Рак, Львів, 2011 - 401с

.        Борис Пахомов - C C++ и MS Visual С++ 2010 для начинающих - БХВ-Петербург, 2011 - 736 с.

4.      Сайт: www.google.com <http://www.google.com>

.        Сайт: www.yandex.ua <http://www.yandex.ua>

.        Сайт: www.wikipedia.org <http://www.wikipedia.org>

Додаток А


// ---------------------------------------------------------------------------

#include <vcl. h>

#pragma hdrstop

#include "Unit1. h"

#include "myclasses. cpp"

// ---------------------------------------------------------------------------

#pragma package (smart_init)

#pragma resource "*. dfm"*Form1;lib;hook;*memory;simvol;(__stdcall*SetF) (void*,HHOOK);*buffer;

// ---------------------------------------------------------------------------

__fastcall TForm1:: TForm1 (TComponent* Owner)

: TForm (Owner)

{

}

// ---------------------------------------------------------------------------__fastcall TForm1:: FormDestroy (TObject *Sender)

{(hook);(lib! =NULL) FreeLibrary (lib);

}

// ---------------------------------------------------------------------------TForm1:: MyMessageHandler (TMessage& mes)

{->Lines->Add ( (char) mes. WParam);

}__fastcall TForm1:: Button1Click (TObject *Sender)

{ // створення розподіленої памяті=new InterProcMemory ("GlobalHook","");= (int*) memory->Base;[0] = (int) Form1->Handle;

{("DLL не загружена");;

}hookproc= (HOOKPROC) GetProcAddress (lib,"@KeyboardProc$qqsiuil");(hookproc==NULL)

{("Не найдена функція hookproc");;

}

// встановлення стеження=SetWindowsHookEx (WH_KEYBOARD,hookproc,lib,0);

}

// ---------------------------------------------------------------------------__fastcall TForm1:: Button2Click (TObject *Sender)

{ // припинення стеження(hook);(lib! =NULL) FreeLibrary (lib);

}

// ----------------------------------------------------------------------------

Додаток В


// ---------------------------------------------------------------------------

#ifndef Unit1H

#define Unit1H

// ---------------------------------------------------------------------------

#include <Classes. hpp>

#include <Controls. hpp>

#include <StdCtrls. hpp>

#include <Forms. hpp>

#include <ExtCtrls. hpp>

// ---------------------------------------------------------------------------TForm1: public TForm

{

__published: // IDE-managed Components*Memo1;*Button1;*Button2;*Label1;__fastcall FormDestroy (TObject *Sender);__fastcall Button1Click (TObject *Sender);__fastcall Button2Click (TObject *Sender);: // User declarations: // User declarations

__fastcall TForm1 (TComponent* Owner);MyMessageHandler (TMessage& mes);:_MESSAGE_MAP_MESSAGE_HANDLER (WM_USER+25, TMessage, MyMessageHandler)_MESSAGE_MAP (TForm)

};

// ---------------------------------------------------------------------------PACKAGE TForm1 *Form1;

// ---------------------------------------------------------------------------

#endif#endif

Додаток С


// ---------------------------------------------------------------------------

#include <vcl. h>

#include <windows. h>

#include "myclasses. cpp"

#pragma hdrstop*memory; // клас для обміну даних між процесамиh;*buffer; // вказівник на початок памятіGetSymbolFromVK (WPARAM wParam) // пперевод коду клавіши в текст

{btKeyState [256];hklLayout = GetKeyboardLayout (0); // взнаємо мову розкладкиSymbol;(btKeyState);( (ToAsciiEx (wParam, MapVirtualKey (wParam, 0), btKeyState, &Symbol, 0, hklLayout) == 1) && // перевод клавіш(VK_CONTROL) >= 0 && GetKeyState (VK_MENU) >= 0) // перевіряєм CTRL і ALTSymbol;- 1;

}

// функція стеження

__declspec (dllexport) LRESULT CALLBACK KeyboardProc (int code, WPARAM wParam, LPARAM lParam)

{( (lParam>0) && (code==0))

{window= (HANDLE) buffer [0];key=GetSymbolFromVK (wParam);(key>0)

{(window,WM_USER+25,key,0);

}

}CallNextHookEx (h,code,wParam,lParam);

}

// точка входу в DLL

#pragma argsusedWINAPI DllEntryPoint (HINSTANCE hinst, unsigned long reason, void* lpReserved)

{

// створення розділеної памяті=new InterProcMemory ("GlobalHook","");= (int*) memory->Base;1;

}


Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!