Я написал приложение с простым текстовым полем, которое пытается идентифицировать пользователя по его привычкам печатать (интервал между нажатиями клавиш, длительность нажатия клавиш, время между нажатиями клавиш, т.е. a-> s быстрее, чем a-> vдля некоторых пользователей короче для других в зависимости от стиля печати).Это далеко от совершенства, но оно правильно определяет умеренно-большие различия в стиле.
Я надеюсь использовать это как форму монитора безопасности - если стиль ввода пользователя не соответствует распознанному шаблону, сообщите на центральный сервер.
Конечно, следующий шаг в тестировании - это начать захватывать "обычные" привычки печатать - т.е. при просмотре, переключении между приложениями и т. д.
ЧтоЯ не могу понять, как это сделать - захватить ввод с клавиатуры для всех приложений (исключая экран входа в систему / приветствия, альтернативные рабочие столы и т. Д. - у меня нет оснований анализировать это, и, вероятно, в любом случае ввода недостаточно для анализа)
Отказ от ответственности: Да, я знаю, что это опасно близко к написанию кейлоггера, который является verboten, но если бы я хотел это сделать, я бы написал драйвер клавиатуры на C ++ - яуверен, что это было бы намного более обтекаемым и легче запутать, чем громоздкая сборка .Net MSIL.Я не сомневаюсь, что буду отбиваться от комментариев "Это кейлоггер", но я врезался в стену и мне нужно куда-то спросить ...
Мне не нужно, чтобы приложение было скрыто- но в идеале хотелось бы иметь возможность собирать ввод без явного подтверждения пользователя (помимо установки администратором) - Если требуется подтверждение пользователя, я могу с этим согласиться (просто), если оно может быть разовым, и у меня есть какой-то способотслеживать и сообщать об отказах.
Возможно ли это даже в .Net?Единственные примеры, которые мне удалось найти, - это добавить обработчик событий к каждому ключу, который кажется неуклюжим, и я думаю, что он подвержен ошибкам.или Опрашивают состояние клавиатуры для определения нажатых клавиш.Для меня это не годится: а) мне нужны точные временные значения нажатий клавиш, поэтому события нажатия клавиш вверх и вниз являются обязательными, и б) это неприятно.
Меня не удивит, если фреймворк будет специально запрещатьв этом случае мне придется прибегнуть к некоторому неуправляемому коду для предоставления событий.Очевидно, я бы предпочел использовать управляемый код полностью.
Любая помощь приветствуется.
Редактировать: Благодаря ответу Ханса Пассанта, это лучший ресурс, который я 'нашел пока: http://www.codeguru.com/columns/vb/article.php/c4831