|
|
|
|
Обработка событий от клавиатуры
I. Эмуляция нажатия клавиши. Внутри приложения это
выполняется достаточно просто с помощью вызова функции Windows API
SendMessage() (можно воспользоваться и методом Perform того объекта (или
формы), кому посылается сообщение о нажатой
клавише). Код Memo1.Perform(WM_CHAR, Ord('A'),
0); или SendMessage(Memo1.Handle, WM_CHAR, Ord('A'), 0); приведет к
печати символа "A" в объекте Memo1.
II. Перехват нажатий клавиши
внутри приложения. Задача решается очень просто. Можно у формы
установить свойство KeyPreview в True и обрабатывать событие OnKeyPress.
Второй способ - перехватывать событие OnMessage для объекта
Application.
III. Перехват нажатия клавиши в
Windows. Существуют приложения, которым необходимо перехватывать все
нажатия клавиш в Windows, даже если в данный момент активно другое
приложение. Это может быть, например, программа, переключающая раскладку
клавиатуры, резидентный словарь или программа, выполняющая иные действия по
нажатию "горячей" комбинации клавиш. Перехват всех событий в Windows (в том
числе и событий от клавиатуры) выполняется с помощью вызова функции
SetWindowsHook(). Данная функция регистрирует в системе Windows ловушку
(hook) для определенного типа событий/сообщений. Ловушка - это
пользовательская процедура, которая будет обрабатывать указанное событие.
Основное здесь то, что эта процедура должна всегда присутствовать в памяти
Windows. Поэтому ловушку помещают в DLL и загружают эту DLL из программы.
Пока хоть одна программа использует DLL, та не может быть выгружена из
памяти.
Пример работающей программы можно скачать здесь: http://delphi.mastak.ru/download/HookDLL.zip Он
отлавливает нажатия клавиш во всех приложениях и выводит их в окно основной
программы, которая ставит хук. (За программу отдельное спасибо "Raptor"
и Юрию
Зотову)
|
Copyright ©
"Мастера DELPHI" E-mail:
delphi@mastak.com
http://www.delphimaster.ru |
Источник получения информации: http://www.delphimaster.ru
|
|