type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var
MouseHook: HHOOK;
function LowLevelMouseProc(nCode: Integer; WParam: WPARAM; LParam: LPARAM): LRESULT; stdcall;
begin
Result := CallNextHookEx(MouseHook, nCode, WParam, LParam);
case WParam of
WM_LBUTTONDOWN: Form1.Memo1.Lines.Add('Мыша вдавилась левой кнопкой.');
WM_LBUTTONUP: Form1.Memo1.Lines.Add('Мыша отдавилась левой кнопкой.');
WM_LBUTTONDBLCLK: Form1.Memo1.Lines.Add('Мыша дважды клацнулась левой кнопкой.');
WM_RBUTTONDOWN: Form1.Memo1.Lines.Add('Мыша вдавилась правой кнопкой.');
WM_RBUTTONUP: Form1.Memo1.Lines.Add('Мыша отдавилась правой кнопкой.');
WM_RBUTTONDBLCLK: Form1.Memo1.Lines.Add('Мыша дважды клацнулась правой кнопкой.');
WM_MBUTTONDOWN: Form1.Memo1.Lines.Add('Мыша вдавилась средней кнопкой.');
WM_MBUTTONUP: Form1.Memo1.Lines.Add('Мыша отдавилась средней кнопкой.');
WM_MBUTTONDBLCLK: Form1.Memo1.Lines.Add('Мыша дважды клацнулась средней кнопкой.');
WM_MOUSEMOVE: Form1.Memo1.Lines.Add('Мыша побежала.');
WM_MOUSEWHEEL: Form1.Memo1.Lines.Add('Мыша тащиться.');
else
Form1.Memo1.Lines.Add('Мыша сошла с ума, купите новую мышу.');
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UnhookWindowsHookEx(MouseHook);
end;
end.
Тож самое и на клавиатуру, код хука - Цифра 13 Соответственно принимай уже мессаги от клавиатуры...
Только начиная с Win 2000
Взято из http://forum.sources.ru
Автор: Rouse_
Передать контент на русский язык:
Определить событие, генерируемое мышкой, можно с помощью низкоуровневого хука мыши в Delphi. Низкоуровневый хук мыши позволяет поймать все события мыши, включая WM_MOUSEMOVE, WM_LBUTTONDOWN, WM_RBUTTONDOWN и т.д.
В вашем коде уже реализовано это с помощью функции LowLevelMouseProc. Эта функция вызывается для каждого события мыши и проверяет значение WParam (которое указывает, какой кнопкой мыши была нажата или отпущена) для определения произошедшего события.
Вот шаг за шагом, как использовать этот хук:
В обработчике события FormCreate вашей формы вы настраиваете низкоуровневый хук мыши с помощью функции SetWindowsHookEx.
Функция LowLevelMouseProc вызывается для каждого события мыши.
Вы проверяете значение WParam, чтобы определить, что произошло (например, WM_LBUTTONDOWN для события нажатия левой кнопки).
В зависимости от события вы можете выполнить любые необходимые действия, такие как обновление контролов вашей формы или логирование события.
В вашем коде уже реализовано это, добавляя строки в текстовое поле на основе произошедшего события мыши.
Обратите внимание, что вам также нужно очистить хук, когда ваша форма закрывается. Это делается в обработчике события FormClose с помощью функции UnhookWindowsHookEx.
Что касается событий клавиатуры, вы можете использовать низкоуровневый хук клавиатуры (код 13) для поймания всех вводов клавиатуры. Это похоже на настройку хука мыши, но есть некоторые отличия:
Вам нужно определить процедуру низкоуровневого хука клавиатуры (аналогично LowLevelMouseProc), которая будет вызываться для каждого события клавиатуры.
В этой процедуре вы проверяете значение WParam (которое указывает, какой клавишей была нажата или отпущена) и выполняете любые необходимые действия.
Вот пример реализации низкоуровневого хука клавиатуры:
functionLowLevelKeyboardProc(nCode:Integer;WParam:WPARAM;LParam:LPARAM):LRESULT;stdcall;beginResult:=CallNextHookEx(MouseHook,nCode,WParam,LParam);caseWParamofVK_SPACE:// Spacebar pressedForm1.Memo1.Lines.Add('Spacebar pressed');VK_RETURN:// Enter key pressedForm1.Memo1.Lines.Add('Enter key pressed');// ...end;end;procedureTForm1.FormCreate(Sender:TObject);beginMouseHook:=SetWindowsHookEx(WH_KEYBOARD_LL,@LowLevelKeyboardProc,HInstance,0);end;procedureTForm1.FormClose(Sender:TObject;varAction:TCloseAction);beginUnhookWindowsHookEx(MouseHook);end;
В этом коде настраивается низкоуровневый хук клавиатуры и поймываются нажатия spacebar и enter key. Вы можете добавить больше случаев для обработки других событий клавиатуры.
Обратите внимание, что, как и в случае с хуками мыши, вам нужно очистить хук клавиатуры, когда ваша форма закрывается.
Можно узнать, что событие сгенерировала мышь, путем использования низкоуровневого хука мыши и обработки различных сообщений Windows.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.