Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.01.13;
Скачать: [xml.tar.bz2];

Вниз

Ловушка WH_Keyboard…   Найти похожие ветки 

 
SemFLY   (2002-11-23 22:32) [0]

Мне надо чтобы моя программа перехватывала нажатие клавиш на клавиатуре и показывала сообщение с той клавишей, которую я нажму, допустим «Нажата клавиша ‘q’»

Ловушку я поставил, а вот как именно узнать какая клавиша нажата ?

Вот мой код :

function PressKey(code : integer; wParam : word;
lParam : longint) : longint; stdcall;
begin
if code = HC_ACTION then
begin
// какой код должен быть тут
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
If SetWindowsHookEx(WH_Keyboard,@PressKey, HInstance, 0) > 0 then ShowMessage("Hook Setup !");
end;


------------

Спасибо ! :))


 
Morfein   (2002-11-23 22:55) [1]

Код клавиши передаётся параметром wParam.
Нажата или отпущена клавиша, определяет 31 бит параметра lParam
Название клавиши можнно получить через функцию GetKeyNameText


 
SemFLY   (2002-11-24 00:44) [2]

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


 
Song   (2002-11-24 10:51) [3]

ShowMessage("Нажата клавиша "+Chr(WParam))


 
Cosmic   (2002-11-24 16:48) [4]

Кстати, а можно ли эту ловушку сделать глобальной, не используя ДЛЛ?


 
Morfein   (2002-11-24 20:13) [5]

to Cosmic : можно, но на 2k/XP работать не будет...


 
SemFLY   (2002-11-25 01:30) [6]

Всё работает, но ткт ещё вопрос возник, а в определённом окне чтобы отловить нажатие клавиши ?


 
Fantasist   (2002-11-25 08:06) [7]


> Morfein © (24.11.02 20:13)
> to Cosmic : можно, но на 2k/XP работать не будет...


Интересно... А как это будет работать в win95/98? MSDN черным по белому пишет, что глобальная ловушка должна быть размещена в dll ибо код обрабатывающий ловушку должен быть загружен во все исполняющиеся процессы.


 
Song   (2002-11-25 08:10) [8]

>>to Cosmic : можно, но на 2k/XP работать не будет...
Чушь. Глобальная ловушка не может быть без dll.


 
SemFLY   (2002-11-25 17:48) [9]

...


 
Morfein   (2002-11-25 20:23) [10]

Чушь. Глобальная ловушка не может быть без dll
to Song : самонадеянное заявление :)) ты же не пробовал...
всё делается просто... процедура-ловушка может быть расположена в этом самом исполняемом модуле и просто экспортирована из него.
Плохо только то, что всместе с процедурой в память будет загружено дохрена ненужного там в данный момент кода самой exe-шки...
Я лично это проверял, если не веришь, могу прислать клавиатурный шпион, работающий без dll"a и сам убедишься!
А на NT"ях не работает по непонятной причине... ловушка устанавливается, но не вызывается системой...


 
SemFLY   (2002-11-25 20:59) [11]

Morfein, а ты мне можешь отправить код этого шпиона, буду очень признателен...
Email : loop@mailru.com



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.01.13;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.01 c
3-36981
Vick
2002-12-18 14:42
2003.01.13
в TDBGridEh событие скроллинга


7-37412
Ш-К
2002-10-07 04:28
2003.01.13
Как из под WIndows 9x/NT ловить прерывания?


3-36925
alexey1917
2002-12-17 08:06
2003.01.13
commit автоматический


3-36995
Filat
2002-12-19 10:29
2003.01.13
В D6 не работает dsEdit, dsInsert. Неизвестный идентификатор?


1-37150
oleon
2002-12-28 12:45
2003.01.13
Вопрос по работе с CharToOem. Странно(для меня)....





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский