- •Гоувпо «Воронежский государственный технический университет»
- •Методические указания
- •Требования к выполнению и оформлению лабораторных работ
- •Лабораторная работа № 9. Средства ввода информации в ос windows. Анализ и преобразование скэн-кода при вводе с клавиатуры
- •Лабораторная работа № 10. Организация таблиц идентификаторов
- •Краткие теоретические сведения Назначение таблиц идентификаторов
- •Принципы организации таблиц идентификаторов
- •Простейшие методы построения таблиц идентификаторов
- •Построение таблиц идентификаторов по методу бинарного дерева
- •Порядок выполнения работы
- •Варианты заданий
- •Основные контрольные вопросы
- •Вопросы к колоквиуму
- •Приложение
- •Библиографический список
- •Содержание
Лабораторная работа № 9. Средства ввода информации в ос windows. Анализ и преобразование скэн-кода при вводе с клавиатуры
Задание 1. Разработать программу, позволяющую пользователю получить информацию о состоянии клавиатуры, т.е. вывести на экран работу программы-ловушки нажатия пользователем некоторых клавиш.
О состоянии клавиатуры дают информацию следующие функции API: GetKeyState, GetAsyncKeyState, GetKeyboardState.
Функция GetKeyState Описание: function GetKeyState(VirtKey: Integer): Integer;
Функция определяет каково состояние виртуальной клавиши: поднята, нажата или пеpеключается.
Паpаметpы: VirtKey: Виpтуальная клавиша.
Возвpащаемое значение:
Клавиша нажата, если стаpший бит pавен 1, и клавиша пеpеключается, если младший бит pавен 1.
Ход выполнения:
1. В Delphi создать проект на диске с уникальным именем.
2. Для примера составим функцию CapsLock, которая позволит определить включена или выключена клавиша CapsLock. В Windows определены специальные константы для каждой клавиши. VK_CAPITAL – константа кода виртуальной клавиши CapsLock.
function CapsLock : boolean;
begin
result:=(GetKeyState(VK_CAPITAL) and 1) <> 0;
end;
3. Поместить на форму объект Button и подписать выполняемое действие щелчком по данной кнопке (свойство Caption). Добавить объект Edit или Label, в котором будет появляться сообщение о состоянии клавиши CapsLock.
4. В событие OnClick объекта Button ввести следующие операторы:
a:=CapsLock;
if a=TRUE then
EditCL.Text:= 'нажата клавиша CapsLock '
else
EditCL.Text:=' клавиша CapsLock не нажата ';
5. Запустить программу на выполнение.
6. Самостоятельно составить функции и процедуры-ловушки нажатия на клавиши пользователями (не менее 5). Таблица кодов виртуальных клавиш представлена в Приложении 1.
7. Сдать преподавателю работу.
Задание 2. Разработать программу, позволяющую по установленной в программе горячей клавише возвращать активность приложения.
Ход выполнения:
В Delphi создать проект на диске с уникальным именем.
2. В разделе Private надо описать следующую процедуру:
procedure WMHotKey(var Message: TMessage); message WM_HOTKEY;
3. Листинг процедуры имеет следующий вид:
procedure TForm1.WMHotKey(var Message: TMessage);
begin
application.Restore;
application.BringToFront;
showmessage('Нажата CTRL-F7');
end;
4. В событие формы OnActivate добавить оператор, позволяющий назначить горячую клавишу:
RegisterHotKey(Form1.Handle, 123, mod_control, VK_F7);
5. В событие формы OnDestroy добавить оператор, отменяющий горячие клавиши:
UnregisterHotKey(Handle, 123);
6. Изменить горячую клавишу в программе.
7. Сдать преподавателю работу.
Задание 3. Разработать программу, позволяющую перехватить нажатие клавиш, с использованием стандартных событий объекта Form.
Ход выполнения:
В Delphi создать проект на диске с уникальным именем.
В событие формы OnKeyDown добавить оператор:
if Key = VK_RIGHT then
…
Самостоятельно оформить экранную форму приложения, в котором надо перехватить нажатие не менее 5-ти клавиш.
4. Сдать преподавателю работу.
Задание 4. Разработать программу, позволяющую менять раскладку клавиатуры.
Ход выполнения:
В Delphi создать проект на диске с уникальным именем.
В программе использовать переменную Layout
Layout: array[0.. KL_NAMELENGTH] of char;
На форме создать объекты Button1, Button2, Edit, которые позволят переключать раскладку клавиатуры с русской на английскую и проверить работоспособность переключения.
4. Для русской раскладки клавиатуры используется функция:
LoadKeyboardLayout( StrCopy(Layout,'00000419'), KLF_ACTIVATE)
Для английской раскладки клавиатуры – функция:
LoadKeyboardLayout(StrCopy(Layout,'00000409'), KLF_ACTIVATE)
5. Сдать преподавателю работу.
Задание 5. Дан листинг программы запуска внешнего приложения и ожидания его завершения. Подключите ее к программе предыдущего задания и замените внешнее приложение.
procedure TForm1.Button1Click(Sender: TObject);
var
si : Tstartupinfo;
p : Tprocessinformation;
begin
FillChar( Si, SizeOf( Si ) , 0 );
with Si do begin
cb := SizeOf( Si);
dwFlags := startf_UseShowWindow;
wShowWindow := 4;
end;
Application.Minimize;
Createprocess(nil,'notepad.exe',nil,nil,false,
Create_default_error_mode,nil,nil,si,p);
Waitforsingleobject(p.hProcess,infinite);
Application.Restore;
end;
Задание 6. Составить учебную задачу с использованием приведенных приемов перехвата нажатия клавиш клавиатуры. Записать постановку задачи и составить программу.
Оформить отчет по заданию 6 лабораторной работы с распечаткой уникальных процедур с пояснениями и экранной формы программы и копии экранов результата работы программы.