Как известно, чтобы отловить нажатие клавиши клавиатуры, нужно использовать события KeyPress, KeyDown, и KeyUp. Однако, бывает ситуация, когда мы не знаем на каком элементе формы будет установлен "фокус". Назначать событие на каждый элемент формы — это конечно глупо. Поэтому в этой краткой статье я записал для себя (и тех, кто прочтет) памятку о том, как отловить нажатие клавиши какой бы элемент формы не был активным.
Событие нажатия клавиши на клавиатуре на любом элементе формы
Для того, чтобы форма получала все события клавиш на каком бы активном элементе они не были нажаты, нужно всего лишь установить свойство формы KeyPreview = true. Тогда все события сналача будет получать форма, а затем передавать управление событиям, назначенным элементам.
В этой статье мы напишем такую программу, с помощью которой можно будет отслеживать нажатия клавиш и сохранять их в файл. Такое приложение можно использовать, к примеру, чтобы подшутить над своим другом, показав ему, что знаете, что он пишет, когда вас нет рядом. По сути дела нам требуется кейлоггер, но легальный, который можно использовать только законно. Итак, формулируем задачу:
Требуется создать программу, которая будет незаметно отслеживать нажатия клавиш на клавиатуре и записывать их в файл.
В строках 24-25 задаем массивы соответствия раскладок клавиатуры — мы ж ориентированы на русскоязычную аудиторию. Пишем нажатия в файл WriteText.txt. Незаметность обеспечивается скрытием консоли (приложение консольное). Код тестировался в Microsoft Visual C# 2010, Microsoft .NET Framework 4.
Итак, теперь мы умеем перехватывать нажатия клавиш и записывать их в файл. Если у вас есть какие-либо вопросы по данному коду, или вообще по C#, или требуется какая-либо программа, то вы можете написать на почту up777up@yandex.ru — вам за вознаграждение в денежном эквиваленте обязательно помогут.
статьи IT, си шарп, кейлоггер
Бесплатный https и
домен RU в подарок
Имеется WPF-приложение (аудио-проигрыватель). Необходимо добавить возможность отлавливать нажатие определённых клавиш, даже когда приложение свёрнуто. Например, при нажатии Num4 — останавливать вопроизведение, при нажатии других клавиш (в зависимости от настроек — продолжать воспроизведение музыки и т.п.). Пробовал реализовать через функцию GetAsyncKeyState(int vkey) из user32.dll , но мне это не совсем подходит, вот пример кода:
Проблема здесь в том, что мне не только нужно отловить нажатие клавиши, но и предотвратить "продвижение" нажатия клавиши далее. Т.е. нажатие клавиши должно перехватываться моим приложением и не попадать в другие (например, в текстовый редактор). Буду благодарен за помощь. Если кто-нибудь ещё и подскажет как это корректно реализовать для приложения, которое развертывается через ClickOnce, было бы вообще шикарно. Спасибо!
1 ответ 1
Начиная с Windows Vista можно использовать функцию RegisterHotKey. Она позволяет зарегистрировать глобальную горячую клавишу и указать окно, которое будет принимать сообщения. Чтобы обработать эти сообщения в WPF приложении, нужно зарегистрировать обработчик через HwndSource.AddHook.
Пример как обработать событие горячей клавиши и вывести момент ее нажатия в TextBlock: