
- •ЛЕКЦІЯ 7
- •ПАСТКИ В ОС WINDOWS
- •ПАСТКИ В ОС WINDOWS
- •ПАСТКИ В ОС WINDOWS
- •ТИПИ ПАСТОК В ОС WINDOWS
- •ТИПИ ПАСТОК В ОС WINDOWS
- •ТИПИ ПАСТОК В ОС WINDOWS
- •ТИПИ ПАСТОК В ОС WINDOWS
- •ТИПИ ПАСТОК В ОС WINDOWS
- •ТИПИ ПАСТОК В ОС WINDOWS
- •ТИПИ ПАСТОК В ОС WINDOWS
- •ТИПИ ПАСТОК В ОС WINDOWS
- •ТИПИ ПАСТОК В ОС WINDOWS
- •РОЗРОБКА ПАСТОК В ОС WINDOWS
- •БІБЛІОТЕКА, ЯКА МІСТИТЬ ФУНКЦІЇ ПАСТОК МИШІ І КЛАВІАТУРИ
- •БІБЛІОТЕКА, ЯКА МІСТИТЬ ФУНКЦІЇ ПАСТОК МИШІ І КЛАВІАТУРИ(ПРОДОВЖЕННЯ)
- •БІБЛІОТЕКА, ЯКА МІСТИТЬ ФУНКЦІЇ ПАСТОК МИШІ І КЛАВІАТУРИ(ПРОДОВЖЕННЯ)
- •ДОДАТОК, ЯКИЙ ВСТАНОВЛЮЄ І ЗНІМАЄ
- •ДОДАТОК, ЯКИЙ ВСТАНОВЛЮЄ І ЗНІМАЄ
- •УСТАНОВКА ІКОНИ ПРОГРАМИ В СИСТЕМНУ
- •УСТАНОВКА ІКОНИ ПРОГРАМИ В СИСТЕМНУ ОБЛАСТЬ

ЛЕКЦІЯ 7
Розробка пасток в ОС Windows
Операційні системи доц. Сінельнікова Т.Ф.

ПАСТКИ В ОС WINDOWS
Пастка (hook) - це механізм, який дозволяє проводити моніторинг повідомлень системи і обробляти їх до того, як вони досягнуть цільової віконної процедури. Пастка може отримувати до себе всі повідомлення, які виникають в системі, обробляти їх і передавати далі в ту програму, якою ці повідомлення адресовані.
2
Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.ua

ПАСТКИ В ОС WINDOWS
Пастки можуть використовуватися додатками в наступних цілях:
Обробляти або змінювати всі повідомлення, призначені для всіх діалогових вікон (dialog box), інформаційних вікон (message box), смуг прокрутки (scroll bar), або меню однієї програми (WH_MSGFILTER).
Обробляти або змінювати всі повідомлення, призначені для всіх діалогових вікон, інформаційних вікон, смуг прокрутки, або меню всієї системи (WH_SYSMSGFILTER).
Обробляти або змінювати всі повідомлення в системі (всі види повідомлень), одержувані функціями GetMessage або PeekMessage (WH_GETMESSAGE).
Обробляти або змінювати всі повідомлення (будь-якого типу), що посилаються викликом функції SendMessage (WH_CALLWNDPROC).
3
Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.ua

ПАСТКИ В ОС WINDOWS
Записувати або програвати подіїї клавіатури та миші (WH_JOURNALRECORD, WH_JOURNALPLAYBACK).
Обробляти, змінювати або видаляти події клавіатури(WH_KEYBOARD).
Обробляти, змінювати або скасовувати події миші (WH_MOUSE).
Реагувати на певні дії системи, роблячи можливим розробку додатків комп'ютерного навчання - computer-based training (WH_CBT).
Запобігти виклику іншої функції-фільтра (WH_DEBUG).
4
Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.ua

ТИПИ ПАСТОК В ОС WINDOWS
Тип пастки |
|
|
|
Опис |
|
|
Область видимості |
|
WH_CALLWNDPROC |
Цей |
тип |
пасток |
викликається |
при кожному |
Потік або вся |
||
|
виклику |
функції |
SendMessage. Фільтруючій |
система |
||||
|
функції передається код пастки, що показує, чи |
|
||||||
|
була проведена посилка повідомлення з |
|
||||||
|
поточного потоку, а також покажчик на структуру з |
|
||||||
|
інформацією про повідомлення. Фільтри можуть |
|
||||||
|
тільки обробити повідомлення, не змінюючи його. |
|
||||||
WH_CBT |
Використовується |
при |
розробці |
додатків |
для |
Потік або вся |
||
|
інтерактивного навчання в тих випадках, коли |
система |
||||||
|
необхідно координувати його роботу з роботою |
|
||||||
|
програми, для якого розробляється навчальна |
|
||||||
|
система. Windows передає фільтруючій функції |
|
||||||
|
код пастки, що показує, яка сталася подія, і |
|
||||||
|
відповідні цій події дані. Існує 10 різних кодів, які |
|
||||||
|
може |
отримувати |
пастка |
даного |
типу: |
|
||
|
HCBT_ACTIVATE, |
|
HCBT_CREATEWND, |
|
||||
|
HCBT_DESTROYWND, |
HCBT_MINMAX, |
|
|||||
|
HCBT_MOVESIZE, |
|
HCBT_SYSCOMMAND, |
|
||||
|
HCBT_CLICKSKIPPED, |
HCBT_KEYSKIPPED, |
|
HCBT_SETFOCUS, HCBT_QS
5
Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.ua

ТИПИ ПАСТОК В ОС WINDOWS
Тип пастки |
Опис |
WH_DEBUG |
Цей тип пасток викликається Windows перед |
|
викликом фільтруючих функцій. Фільтри не можуть |
|
змінювати значення, передані цій пастці, але можуть |
|
запобігти виклику фільтруючої функції, повернувши |
|
ненульове значення. У параметрі wParam |
|
передається ідентифікатор викликаємої пастки, а |
|
параметр lParam містить покажчик на структуру |
|
DEBUGHOOKINFO. |
Область
видимості
Потік або вся система
WH_GETMESSAGE Цей тип пастки викликається Windows перед виходом з функцій GetMessage і PeekMessage. Фільтруючі
функції отримують покажчик на структуру з повідомленням, яке потім разом з усіма можливими змінами надсилається додатком, який викликав функції GetMessage або PeekMessage. У параметрі lParam знаходиться покажчик на структуру MSG (повідомлення).
Потік або вся система
6
Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.ua

ТИПИ ПАСТОК В ОС WINDOWS
Тип пастки
WH_JOURNALRECORD
|
|
Опис |
|
Область |
|
|
|
|
|
|
видимості |
Фільтри |
пастки |
цього |
типу |
Тільки |
|
викликаються для всіх подій миші і |
система |
||||
клавіатури, крім тих, які програються |
|
||||
реєстраційної |
|
пасткою |
при |
|
|
відтворенні. |
Фільтруючі |
функції |
|
||
можуть |
обробити |
повідомлення - |
|
||
записати подію в пам'яті або на |
|
||||
диску, але не можуть змінювати або |
|
||||
скасовувати його. Фільтруючі функції |
|
||||
цих пасток можуть реалізовуватися у |
|
||||
динамічній бібліотеці або в. EXE- |
|
||||
файлі. Для пасток даного типу в |
|
||||
Windows |
|
реалізований |
код |
|
|
HC_ACTION. |
|
|
|
|
7
Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.ua

ТИПИ ПАСТОК В ОС WINDOWS
Тип пастки
WH_JOURNALPLAY BACK
|
Опис |
|
|
Область |
|
|
|
|
видимості |
Пастки цього типу використовуються для посилки |
Тільки |
|||
повідомлень клавіатури і миші таким чином, |
система |
|||
начебто вони проходять через системну чергу |
|
|||
Windows. Основне призначення пасток цього типу |
|
|||
це програвання подій, записаних за допомогою |
|
|||
пасток типу WH_JOURNALRECORD. Також пастки |
|
|||
цього типу можна використовувати для посилки |
|
|||
повідомлень іншим додаткам. Windows ігнорує рух |
|
|||
миші до тих пір, поки в системі встановлена пастка |
|
|||
цього типу. Всі інші події від клавіатури і миші |
|
|||
зберігаються до тих пір, поки не залишиться |
|
|||
фільтруючих |
функцій |
для |
пастки |
|
WH_JOURNALPLAYBACK. Фільтруючі функції цих пасток можуть реалізовуватися у динамічній бібліотеці або в. EXE-файлі і ці функції повинні використовувати коди HC_GETNEXT і HC_SKIP.
8
Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.ua

ТИПИ ПАСТОК В ОС WINDOWS
Тип пастки
WH_FOREGROU
NDIDLE
Опис
Цей тип пастки викликається Windows в тому випадку, коли до поточного потоку не надходить інформація, введена користувачем для обробки. Дана пастка має повідомний характер і параметри wParam і lParam рівні 0.
Область
видимості
Потік або вся система
WH_SHELL
Цей тип пасток використовується при діях з вікнами, що не мають власника. Коли пастка встановлена локально, то вона викликається тільки для вікон, що належать потоку, який її встановив. Цей тип пасток є інформаційним, і тому фільтруючі функції не можуть змінювати або скасовувати подію. У параметрі wParam передається покажчик вікна, а параметр lParam не використовується. Для пасток даного типу визначені коди: SHELL_WINDOWCREATED, HSHELL_WINDOWDESTROYED, HSHELL_ACTIVATESHELLWINDOW.
Потік або вся система
9
Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.ua

ТИПИ ПАСТОК В ОС WINDOWS
Тип пастки |
Опис |
|
|
WH_KEYBOARD Пастки даного |
типу викликаються, коли |
функції |
|
GetMessage або PeekMessage збираються повернути |
|||
повідомлення |
WM_KEYUP, |
WM_KEYDOWN, |
|
WM_SYSKEYUP, |
WM_SYSKEYDOWN, |
або |
WM_CHAR. Якщо пастка цього типу встановлена як локальна, то ці повідомлення мають надходити з вхідної черги потоку, до якого вона прикріплена. В фільтруючу функцію надходить віртуальний код клавіші, і стан клавіатури на момент виклику пастки. В фільтруючій функції допускається скасування повідомлень. Для пасток даного типу визначені коди: HC_ACTION і HC_NOREMOVE. Перший код використовується при видаленні події від клавіатури з системної черги, а другий коли повідомлення не видаляється з черги, через виклик функції PeekMessage з параметром PM_NOREMOVE. При виклику пастки з цим кодом може не передаватися дійсний стан клавіатури і це необхідно передбачати в додатку.
Область видимості
Потік або вся система
10
Операційні системи. Кафедра Інформатики. E-mail: informatika@kture.kharkov.ua