Отлавливаем нажатие калавиш клавиатуры.

Опубиковано: 08.06.2008 г., автор: , просмотров: 67618

Уроки програмирования на языке Delphi.

В этом коротком уроке я покажу вам, как перехватывать нажатия кнопок клавиатуры. Пригодиться он для написания простенького клавиатурного шпиона, который бы отлавливал нажатия клавиш и вёл лог. Можно написать просто небольшой прикол типа если пользователь нажимает клавишу "Ф" то на экране появляется "И". Короче я думаю фантазия у вас работает нормально поэтому применение этому коду вы найдете.

Начинаем кодить, нам понадобиться: Компонент Timer с закладки System и компонент Label с закладки Standart. Выделяем Timer, создаем, обработчик событий OnTime и прописываем в нем следующий код:

if getasynckeystate($1b)<>0 then
Label1.Caption:='Вы нажали ESC'

Вот что должно получиться:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if getasynckeystate($1b)<>0 then
Label1.Caption:='Вы нажали ESC'
end;

В данном примере мы перехватываем нажатие клавиши ESC во всем Windows и побарабану активна или нет наша программа. Используем мы здесь Api функцию getasynckeystate, в качестве параметра ей нужно указать виртуальный код клавиши, котрую хотим отлавливать. В нашем случае это Esc виртуальный код $1b. Все виртуальные коды клавиш приведены ниже:

Да чуть не забыл, свойство Interval у компонента Timer меняем на 1

vk_lbutton = $01;
vk_rbutton = $02;
vk_cancel = $03;
vk_mbutton = $04;
vk_back = $08;
vk_tab = $09;
vk_clear = $0c;
vk_return = $0d;
vk_shift = $10;
vk_control = $11;
vk_menu = $12;
vk_pause = $13;
vk_capital = $14;
vk_escape = $1b;
vk_space = $20;
vk_prior = $21;
vk_next = $22;
vk_end = $23;
vk_home = $24;
vk_left = $25;
vk_up = $26;
vk_right = $27;
vk_down = $28;
vk_select = $29;
vk_print = $2a;
vk_execute = $2b;
vk_snapshot = $2c;
vk_insert = $2d;
vk_delete = $2e;
vk_help = $2f;
>> vk_a - vk_z такие же, как и их ascii-эквиваленты: 'a' - 'z' ($41 - $5A)<<
>> vk_0 - vk_9 такие же, как и их ascii-эквиваленты: '0' - '9' ($30 - $39)}
vk_numpad0 = $60;
vk_numpad1 = $61;
vk_numpad2 = $62;
vk_numpad3 = $63;
vk_numpad4 = $64;
vk_numpad5 = $65;
vk_numpad6 = $66;
vk_numpad7 = $67;
vk_numpad8 = $68;
vk_numpad9 = $69;
vk_multiply = $6a;
vk_add = $6b;
vk_separator = $6c;
vk_subtract = $6d;
vk_decimal = $6e;
vk_divide = $6f;
vk_f1 = $70;
vk_f2 = $71;
vk_f3 = $72;
vk_f4 = $73;
vk_f5 = $74;
vk_f6 = $75;
vk_f7 = $76;
vk_f8 = $77;
vk_f9 = $78;
vk_f10 = $79;
vk_f11 = $7a;
vk_f12 = $7b;
vk_f13 = $7c;
vk_f14 = $7d;
vk_f15 = $7e;
vk_f16 = $7f;
vk_f17 = $80;
vk_f18 = $81;
vk_f19 = $82;
vk_f20 = $83;
vk_f21 = $84;
vk_f22 = $85;
vk_f23 = $86;
vk_f24 = $87;
vk_numlock = $90;
vk_scroll = $91;

До встречи www.delphiexpert.ru



Похожие материалы

Последние из рубрики

Мы платим за лайки! - Выплаты по требованию! 17 Май 2017 в 12:25 #
Наш сервис предоставляет настоящие лайки на фотографии заказчиков, которые готовы платить за качество.

Именно для этого мы и набираем удалённых сотрудников, которые будут выполнять работу, то есть ставить лайки и получить за это деньги.

Чтобы стать нашим удалённым сотрудником и начать ставить лайки, зарабатывая при этом 45 рублей за 1 поставленный лайк,

достаточно просто зарегистрироваться на нашем сервисе. > oplata-vklike.tk <

Вывод заработанных средств ежедневно в течении нескольких минут.
Mina inlägg fungera 18 Мар 2017 в 06:30 #
Mina inlägg fungerar inte alls :S När jag skriver nya sÃ¥ fungerar de inte att hitta dom de länkas tillbaka till min första sida pÃ¥ bloggen de blir sÃd¤:hrÃ¥en länkar till samma sida somman har pÃ¥ första sidan hur fixar man detta förlorar pengar pÃ¥ mina sponsrade inlägg :S
Talan 19 Май 2015 в 21:46 #
Автору спасибо! Очень полезная функция.
Сам сделал вот так:
procedure TForm1.Timer1Timer(Sender: TObject);
var
CodeKlav,CodeKlavSTr : string;
I,m: integer;
begin
m:=0;
CodeKlavSTr := '2122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F40414243 4445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F7B7C7D7E7F';
for i:=1 to 68 do
begin
CodeKlav:= '$'+CodeKlavSTr&#x005B;i+m&#x005D;+CodeKlavSTr&#x005B;i+m+1&#x005D;;
if getasynckeystate(strtoint(CodeKlav))<>0 then
begin
keybd_event(strtoint(CodeKlav), 0, KEYEVENTF_KEYUP, 0);
Memo1.Text:= Memo1.Text + Chr(strtoint(CodeKlav));
end;
m:=m+1;
end;
end;

Ни каких залипаний, пропусков итд, все работает как часы. Но пока только для цифр и букв.
PROграммист 04 Июл 2013 в 00:00 #
Рован, недостаток этого метода зак4лючается в том, что если немного дольше продержать клавишу, она дублируется, а если недодержать, то вообще её не видит.
Рован 11 Июн 2013 в 00:00 #
Да как так то?! Люди пишут какие-то там dll библиотеки, чтобы нажатия клавиш перехватывать, а тут всего одна строчка и всё! Не понимаю... Какие недостатки у этого метода?

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