Охота на клавиши

[Назад]

Вам никогда не приходила в голову мысль о том, как бы хорошо было бы запустить соседу в Интернет-кафе на компьютер программку, которая бы читала все его нажатия на клавиши и записывала их в файл?

А задумка о программе, которая будет сидеть в сис-трее, а по нажатию волшебной клавиши F12 выполнять команду "kill command.com", сопровождая процесс веселым музоном?

Ну хотя бы совсем скучная мысль о программе, которая добавляет в систему парочку горячих клавиш, открывая по F3 блокнот, а по F4 пайнтбраш?

Если хотя бы одна из этих мыслей посещала вашу голову, то вы наверняка задумывались о том, как бы ухитриться читать нажатия на клавиши вне фокуса программы.
Так зачем же ломать голову, когда сейчас я вам все расскажу!

Начнем с теории: есть такая функция - замечательная функция API из юзера... Ну то-есть из user32... Ну вы меня поняли. Называется она GetAsyncKeyState(ByVal vKey As Long) As Integer
Вот проверяя ее возвращаемое значение, вы и сможете узнать текущее состояние какой-либо клавиши. Если она нажата, функция возвращает True, иначе... А вот догадайтесь.

Заметьте, что вы не проверяете, КАКАЯ клавиша нажата, как в обычной процедуре Key_Press. Вы проверяете НАЖАТА ЛИ клавиша! Это просто незаменимо, когда надо отследить нажатие нескольких клавиш одновременно, ну хотя бы Ctrl-Alt-Del. С помощью незамысловатой логики вы проверяете искомую комбинацию, и когда найдете, тут же снимаете окошечко "Завершение работы программы" обратно, откуда оно появилось.

Чтобы узнать константы, которые надо подставлять в параметр vKey не надо даже думать. Все уже сделано за вас группой разработчиков Visual Basic. Например, vbKeyEscape - это Escape, vbKeyF12 - это F12... И так до упора.

Удачи вам в выполнении ваших злобных замыслов и вот вам пример программы, которая выскакивает по нажатию Escape, как чертик из коробочки.

Приятного программирования, Antiloop

[Загрузить готовый проект]