Просмотров-120
0

Программа вычисления параметров клавиатурного почерка

Определение параметров клавиатурного почерка

Для решения таких задач, как идентификация пользователя часто используется параметры клавиатурного почерка. Определение параметров клавиатурного почерка можно выполнять с помощью программ, позволяющих измерять множество таких параметров как время удержания клавиши и время паузы между отпусканием одной клавиши и нажатием другой.

Для измерения этих параметров необходимо располагать специальными обработчиками событий, фиксирующих время нажатия и отпускания клавиш клавиатуры, по которым вычисляется время удержания клавиши и время паузы между отпусканием одной клавиши и нажатием другой, значение которых в свою очередь позволяют выполнить определение параметров клавиатурного почерка. Один из возможных вариантов построения такой программы на языке Паскаль сейчас рассмотрим.

Программы, использующие обработчики событий, создаваемые под операционную систему Windows, на практике применяются во многих случаях для решения различных задач. Под обработчиками событий в ОС Windows понимается особые процедуры, в которых описываются действия, которые нужно выполнить при наступлении события.

Программа измерения параметров нажатия клавиш клавиатуры представляет собой совокупность обработчиков событий KeyDown и KeyUp, которые возникают каждый раз, когда нажимается и отпускается клавиша соответственно. Вопрос заключается в том каким способом измерять время наступления этих событий? После некоторых экспериментов было принято решение использовать функцию Now(). Она измеряет количество секунд, прошедшее с начала суток. Точность измерения достаточно высока.

Вот тексты кода двух обработчиков событий KeyDown и KeyUp с использованием функцию Now() и фиксации моментов нажатия и отпускания клавиш при вводе символов логина.

procedure TFrmObuch.EditLoginKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
mTdn[m]:= Now();
end;

procedure TFrmObuch.EditLoginKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
mTup[m]:= Now();
m:=m+1
end;

Как видно из текста фрагментов программы измеренные моменты времени сохраняются в массивах. Причем индекс массивов изменять следует только в обработчике события  KeyUp, иначе будет не синхронное запоминание измерений.

Аналогичные обработчики событий нажатия клавиши KeyDown и отпускания клавиши KeyUp необходимо создать и для ввода символов пароля. Тексты кода этих обработчиков событий приведены ниже.

procedure TFrmObuch.EditPaswKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
mTdn[m]:= Now();
end;

procedure TFrmObuch.EditPaswKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
mTup[m]:= Now();
m:=m+1
end;

Для проверки правильности работы программы нами была создана отладочная версия. Интерфейс отладочной программы имеет вид.

Текст программы показан ниже. В нем предусмотрено формирование динамических массивов, размерностью числа накопленных данных SetLength(mTpr,m). Вычисления времени удержания и паузы между нажатиями клавиш.

mTpr[i]:=mTup[i]-mTdn[i]; mTpz[i]:=mTdn[i+1]-mTup[i];

Результаты выводятся в компонент StringGrid для визуализации и анализа.

StringGridKlvPoc.Cells[i,1]:=FloatToStr((mTdn[i]-Tbg)*1000);
StringGridKlvPoc.Cells[i,2]:=FloatToStr((mTup[i]-Tbg)*1000);

Полный текст отладочной процедуры имеет вид.
procedure TFrmObuch.ButtonEndClick(Sender: TObject);
var
i: integer;
begin
m:=m-1;
SetLength(mTpr,m);
SetLength(mTpz,m);
for i := 0 to m-1 do
begin
mTpr[i]:=mTup[i]-mTdn[i];
mTpz[i]:=mTdn[i+1]-mTup[i];
end;
StringGridKlvPoc.ColCount:=m;
StringGridKlvPoc.ColWidths[0]:=150;
for i := 1 to m do
begin
StringGridKlvPoc.Cells[i,1]:=FloatToStr((mTdn[i]-Tbg)*1000);
StringGridKlvPoc.Cells[i,2]:=FloatToStr((mTup[i]-Tbg)*1000);
end;
end;

Результат работы программы показан ниже на рисунке.

Определение параметром клавиатурного почерка - результат работы обработчиков событий

Результаты вполне приемлемы. Быстродействие вполне приличное. Все хорошо, но более подробный анализ показал, что могут возникать ситуации, при которых появляются искажения измерений. Об этом смотрите следующую статью.

Кто согласен с подходом одобряйте, кто нет, отзывайтесь. Будем рады услышать отзывы!

Дистанционное обучение
Обучение программированию
Проектирование информационных систем
 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *