Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 50056.doc
Скачиваний:
2
Добавлен:
30.04.2022
Размер:
846.85 Кб
Скачать

Лабораторная работа № 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. Разработать программу, позволяющую по установленной в программе горячей клавише возвращать активность приложения.

Ход выполнения:

  1. В 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.

Ход выполнения:

  1. В Delphi создать проект на диске с уникальным именем.

  2. В событие формы OnKeyDown добавить оператор:

if Key = VK_RIGHT then

  1. Самостоятельно оформить экранную форму приложения, в котором надо перехватить нажатие не менее 5-ти клавиш.

4. Сдать преподавателю работу.

Задание 4. Разработать программу, позволяющую менять раскладку клавиатуры.

Ход выполнения:

  1. В Delphi создать проект на диске с уникальным именем.

  2. В программе использовать переменную Layout

Layout: array[0.. KL_NAMELENGTH] of char;

  1. На форме создать объекты 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 лабораторной работы с распечаткой уникальных процедур с пояснениями и экранной формы программы и копии экранов результата работы программы.