жче наводиться таблиця, в якій описано використовуване в драйвері зіставлення клавіш. p align="justify"> Таблиця відповідності цифрових клавіш символам алфавіту
Додаткова клавішаАссоціірованние символи-RusLat + Зміна раскладкіСмена розкладки 2 А Б В гa BC 3 Д Е Ж ЗD EF 4 І Й К ЛG HI 5 М Н О Пj KL 6 Р С Т уm NO 7 Ф Х Ц ЧP QRS 8 Ш Щ Комерсант ИT UV 9 Ь Е Ю ЯW XYZ 0 Підтвердження вибору символу
Таким чином, весь алгоритм перетворень, вироблених в реалізованому драйвері-фільтрі, виглядає наступним чином:
. Аналіз поля, що відповідає за статус драйвера: включений/виключений. Якщо включений - п.2, інакше - п. 4;
. Цикл по всіх IRP-пакетів, що приходять з клавіатури;
. Для кожного IRP-пакета:
.1. Встановити змінну, визначальну, чи є пакет пакетом для виводу в TRUE;
.2. Визначити скан-код клавіші, клавіші;
.3. Перевірити, натиснуто чи символ додаткової клавіатури, якщо так - перейти до п. 3.4., інакше - до п. 3.6.;
.4. Встановити змінну, визначальну, чи є пакет пакетом для виводу в FALSE;
.5. Якщо кнопка була віджата - оновити статус:
.5.1. Якщо скан-код не змінився - перейти до п. 3.5.2., інакше - до п. 3.5.3.;
.5.2. Збільшити лічильник натискань на 1;
.5.3. Якщо кнопка була натиснута: setted: = TRUE, перетворити вибраний код в букву, інакше п. 3.5.4.;
.5.4. Якщо кнопка була відпущена: setted: = TRUE, devExt-> Working: = FALSE, перетворити вибраний код в букву, інакше п.3.5.5 ;
.5.5. Якщо скан код натиснутої клавіші дорівнює 0x78, то змінити поле, що відповідає за використовуваний мову, інакше п. 3.5.6.; p>
.5.6. Якщо кнопка була віджата - проініціалізувати структури новими значення...