Захват всех событий клавиатуры, используя VB.Net - PullRequest
5 голосов
/ 09 августа 2010

Я написал приложение с простым текстовым полем, которое пытается идентифицировать пользователя по его привычкам печатать (интервал между нажатиями клавиш, длительность нажатия клавиш, время между нажатиями клавиш, т.е. a-> s быстрее, чем a-> vдля некоторых пользователей короче для других в зависимости от стиля печати).Это далеко от совершенства, но оно правильно определяет умеренно-большие различия в стиле.

Я надеюсь использовать это как форму монитора безопасности - если стиль ввода пользователя не соответствует распознанному шаблону, сообщите на центральный сервер.

Конечно, следующий шаг в тестировании - это начать захватывать "обычные" привычки печатать - т.е. при просмотре, переключении между приложениями и т. д.

ЧтоЯ не могу понять, как это сделать - захватить ввод с клавиатуры для всех приложений (исключая экран входа в систему / приветствия, альтернативные рабочие столы и т. Д. - у меня нет оснований анализировать это, и, вероятно, в любом случае ввода недостаточно для анализа)

Отказ от ответственности: Да, я знаю, что это опасно близко к написанию кейлоггера, который является verboten, но если бы я хотел это сделать, я бы написал драйвер клавиатуры на C ++ - яуверен, что это было бы намного более обтекаемым и легче запутать, чем громоздкая сборка .Net MSIL.Я не сомневаюсь, что буду отбиваться от комментариев "Это кейлоггер", но я врезался в стену и мне нужно куда-то спросить ...

Мне не нужно, чтобы приложение было скрыто- но в идеале хотелось бы иметь возможность собирать ввод без явного подтверждения пользователя (помимо установки администратором) - Если требуется подтверждение пользователя, я могу с этим согласиться (просто), если оно может быть разовым, и у меня есть какой-то способотслеживать и сообщать об отказах.

Возможно ли это даже в .Net?Единственные примеры, которые мне удалось найти, - это добавить обработчик событий к каждому ключу, который кажется неуклюжим, и я думаю, что он подвержен ошибкам.или Опрашивают состояние клавиатуры для определения нажатых клавиш.Для меня это не годится: а) мне нужны точные временные значения нажатий клавиш, поэтому события нажатия клавиш вверх и вниз являются обязательными, и б) это неприятно.

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

Любая помощь приветствуется.

Редактировать: Благодаря ответу Ханса Пассанта, это лучший ресурс, который я 'нашел пока: http://www.codeguru.com/columns/vb/article.php/c4831

Ответы [ 2 ]

5 голосов
/ 09 августа 2010

Google SetWindowsHookEx + WH_KEYBOARD_LL, ключевые слова, которые хорошо GoogleЭто устанавливает крючок клавиатуры низкого уровня.Это не глобальный хук, поэтому может работать в программе VB.NET.

0 голосов
/ 09 августа 2010

.net не предоставляет никаких услуг подобного рода, поэтому вам придется опускаться ниже и использовать p / invoke.Возможные варианты:

  • Перехват выигрышей
  • Опрос с использованием GetAsyncKeyState
...