Портал освітньо-інформаційних послуг «Студентська консультація»

  
Телефон +3 8(066) 185-39-18
Телефон +3 8(093) 202-63-01
 (093) 202-63-01
 studscon@gmail.com
 facebook.com/studcons

<script>

  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){

  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),

  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)

  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

 

  ga('create', 'UA-53007750-1', 'auto');

  ga('send', 'pageview');

 

</script>

Робота з клавіатурою

Предмет: 
Тип роботи: 
Лабораторна робота
К-сть сторінок: 
18
Мова: 
Українська
Оцінка: 
ЛАБОРАТОРНА РОБОТА
 
Тема роботи: Робота з клавіатурою.
Ціль роботи: Придбання досвіду створення прикладного програмного забезпечення для Windows, взаємодіючого з клавіатурою, із використанням алгоритмічної мови Сі++.
 
ТЕОРЕТИЧНА ЧАСТИНА
 
Хоча Windows підтримує як пристрій уведення інформації миша, робота з клавіатурою як і раніше превалює. При створенні додатків рекомендується реалізувати усі функціональні можливості програми не тільки за допомогою миші, але і за допомогою клавіатури.
Синхронізація подій клавіатури
Заснована на повідомленнях архітектура Windows ідеальна для роботи з клавіатурою.
Додаток узнає про натискання клавіш за допомогою повідомлень, що посилаються віконній процедурі. Коли користувач натискає і відпускає клавіші:
Драйвер клавіатури передає інформацію про натискання клавіш у Windows.
Windows зберігає цю інформацію (у виді повідомлень) у системній черзі повідомлень.
Потім вона передає повідомлення клавіатури, по одному за раз, у чергу повідомлень програми, що містить вікно та має фокус уведення (input focus).
Потім програма відправляє повідомлення відповідній віконній процедурі (за допомогою функції DispatchMessage).
Зміст цього двоступінчастого процесу – збереження повідомлень у системній черзі повідомлень і подальша їхня передача в чергу повідомлень додатка – у синхронізації.
Якщо користувач друкує на клавіатурі швидше, ніж програма може обробляти інформацію, що надходить, Windows зберігає інформацію про додаткові натискання клавіш у системній черзі повідомлень, оскільки одне з додаткових натискань може бути переключенням фокуса введення на іншу програму. Інформацію про наступні натискання варто потім направляти в іншу програму. Таким чином, Windows коректно синхронізує такі події клавіатури.
Для відображення різних подій клавіатури, Windows посилає програмам вісім різних повідомлень. Програми цілком можуть ігнорувати багато яки з них; крім того, у більшості випадків, у цих повідомленнях від клавіатури міститься значно більше закодованої інформації, ніж потрібно додатку.
Зауваження. Застава успішної роботи з клавіатурою – це знання того, які повідомлення важливі для додатка, а які ні.
Апаратні повідомлення.
Коли користувач натискає клавішу, Windows поміщає або повідомлення WM_KEYDOWN, або повідомлення WM_SYSKEYDOWN у чергу повідомлень вікна, що має фокус уведення. Коли клавіша відпускається, Windows поміщає в чергу повідомлень або повідомлення WM_KEYUP, або повідомлення WM_SYSKEYUP.
Отже,
Несистемні апаратні повідомлення – це повідомлення WM_KEYDOWN і WM_KEYUP, а системні – WM_SYSKEYDOWN і WM_SYSKEYUP.
Системні апаратні повідомлення WM_SYSKEYDOWN і WM_SYSKEYUP більш важливі для Windows, чим для додатків. Ці повідомлення звичайно виробляються при натисканні клавіш у сполученні з клавішею <Alt>. Ці повідомлення викликають опції меню чи програми системного меню, чи використовуються для системних функцій, таких як зміна активного додатка (<Alt+Tab>).
Програми звичайно ігнорують повідомлення WM_SYSKEYDOWN і WM_SYSKEYUP і передають їх у функцію DefWindowProc. Віконна процедура, зрештою, одержує інші повідомлення, що є результатом цих апаратних повідомлень клавіатури (наприклад, вибір меню).
Несистемні повідомлення WM_KEYDOWN і WM_KEYUP звичайно виробляються для клавіш, що натискаються і відпускаються без участі клавіші <Alt>. Додаток може використовувати чи не використовувати ці повідомлення клавіатури. Сама Windows їх проігнорує.
Звичайно повідомлення про натискання і відпускання з'являються парами. Однак якщо користувач залишить клавішу натиснутої так, щоб уключилося автоповторення, то Windows посилає віконній процедурі серію повідомлень WM_KEYDOWN (або WM_SYSKEYDOWN) і одне повідомлення WM_KEYUP (чи WM_SYSKEYUP), коли, зрештою, клавіша буде відпущена.
Також як і всі синхронні повідомлення, апаратні повідомлення клавіатури також стають у чергу. Додаток за допомогою функції GetMessageTime одержує час натискання і відпускання клавіші щодо старту системи.
Для всіх апаратних повідомлень клавіатури 32-розрядна перемінна lParam, передана у віконну процедуру, складається із шести полів:
  • лічильника повторень (число натискань клавіші),
  • скан-кода OEM (Original Equipment Manufacturer)  (код клавіші, генеруємий апаратурою комп'ютера),
  • прапора розширеної клавіатури (1, якщо повідомлення клавіатури з'явилося в результаті роботи з додатковими клавішами розширеної клавіатури IBM),
  • коду контексту (1, якщо натиснута клавіша <Alt>),
  • прапора попереднього стану клавіші (0, якщо в попередньому стані клавіша була відпущена, і 1, якщо в попередньому стані вона була натиснута),
  • прапора стану клавіші (0, якщо клавіша натискається, і 1, якщо клавіша відпускається).
Набагато більш важливим параметром апаратних повідомлень клавіатури, у порівнянні з lParam, є параметр wParam. У цьому параметрі міститься віртуальний код клавіші (virtual key code), що ідентифікує натиснуту чи відпущену клавішу.
Для всіх апаратних повідомлень клавіатури параметр wParam містить код віртуальної клавіші, що відповідає натиснутій клавіші. Саме цей параметр використовується додатком для ідентифікації клавіші. Код віртуальної клавіші не залежить від апаратної реалізації клавіатури. Коди віртуальних клавіш мають символьні позначення, визначені в заголовних файлах Windows, і мають префікс VK_.
Ідея програми, що одержує інформацію про натискання будь-якої клавіші дуже приваблива; однак, більшість програм для Windows ігнорують усі, крім декількох повідомлень про натискання і відпускання клавіш.
Повідомлення WM_SYSKEYDOWN і WM_SYSKEYUP адресовані Windows, і додатку не завжди потрібно їх відслідковувати. Якщо додаток обробляє повідомлення WM_KEYDOWN, то повідомлення WM_KEYUP воно звичайно теж ігнорує.
Повідомлення WM_KEYDOWN досить зручне для обробки повідомлень про натискання клавіш керування курсором, функціональних клавіш і спеціальних клавіш (таких як <Insert> чи <Delete>), що не генерують символьні повідомлення.
Символьні повідомлення.
Ідея самостійного перетворення апаратних повідомлень клавіатури в символьні повідомлення, шляхом обліку інформації про положення клавіш зрушення, є досить непродуктивної у силу
Фото Капча