Как использовать процедуру mouse_event для имитации событий мыши
Один юзер другому:
- Я себе счетчик на мышь поставил. Теперь я знаю, что моя мышь пробежала 1138 метров.
На форму вынесены две кнопки. По нажатию первой напишем:
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('Button 1 clicked');
end;
А нажатие второй обработаем так:
procedure TForm1.Button2Click(Sender: TObject);
var
Pt: TPoint;
begin{Позволим кнопке Button2 перерисоваться}
Application.ProcessMessages;
{Найдем координаты центра button 1}
Pt.x := Button1.Left + (Button1.Width div 2);
Pt.y := Button1.Top + (Button1.Height div 2);
{Преобразуем Pt к координатам экрана}
Pt := ClientToScreen(Pt);
{Преобразуем Pt к "mickeys" (аболютным координатам курсора мышки}
Pt.x := Round(Pt.x * (65535 / Screen.Width));
Pt.y := Round(Pt.y * (65535 / Screen.Height));
{Переместим курсор мыши}
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE, Pt.x, Pt.y, 0, 0);
{Имитируем нажатие левой кнопки мыши}
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, Pt.x, Pt.y, 0, 0);
{Имитируем отпускание левой кнопки мыши}
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, Pt.x, Pt.y, 0, 0);
end;
Текст на русском языке:
Процедура Mouse_Event в Delphi позволяет имитировать события мыши, такие как перемещение курсора, нажатие кнопок и прокрутка. В этом коде-наборе Button2 кликается для выполнения этих действий.
Вот что каждый раздел делает:
Application.ProcessMessages: эта строка приостанавливает выполнение программы на короткое время, чтобы позволить другим сообщениям (событиям) быть обработанными. Это важно при имитации событий мыши, потому что оно предотвращает блокировку цикла событий.
Pt.x и Pt.y: эти переменные хранят координаты центра Button1. Расчет основан на свойстве left, top, width и height кнопки.
ClientToScreen(Pt): эта функция преобразует клиентские координаты (относительные к форме) в экранные координаты (абсолютные).
Round(Pt.x * (65535 / Screen.Width)) и Round(Pt.y * (65535 / Screen.Height)): эти строки преобразуют абсолютные экранные координаты в "mickeys", которые являются единицей измерения для движения мыши на Windows. Формула, используемая в этом расчете, выглядит следующим образом: (screen_width/height) * 65535, где screen_width и screen_height представляют собой текущую ширину и высоту экрана.
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE, Pt.x, Pt.y, 0, 0): эта строка имитирует событие перемещения мыши в указанных координатах. Флаг MOUSEEVENTF_ABSOLUTE указывает, что перемещение происходит в абсолютных координатах, а аргументы Pt.x и Pt.y指定уют новую позицию курсора.
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, Pt.x, Pt.y, 0, 0): эта строка имитирует событие нажатия левой кнопки мыши в указанных координатах.
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, Pt.x, Pt.y, 0, 0): эта строка имитирует событие отпускания левой кнопки мыши в указанных координатах.
Вот пример использования этого кода для имитации событий мыши:
procedureTForm1.Button2Click(Sender:TObject);varPt:TPoint;begin{Позволить кнопке Button2 перерисоваться}Application.ProcessMessages;{Найти координаты центра button 1}Pt.x:=Button1.Left+(Button1.Widthdiv2);Pt.y:=Button1.Top+(Button1.Heightdiv2);{Преобразовать Pt в координаты экрана}Pt:=ClientToScreen(Pt);{Преобразовать Pt в "mickeys" (абсолютные координаты курсора мыши)}Pt.x:=Round(Pt.x*(65535/Screen.Width));Pt.y:=Round(Pt.y*(65535/Screen.Height));{Переместить курсор мыши}Mouse_Event(MOUSEEVENTF_ABSOLUTEorMOUSEEVENTF_MOVE,Pt.x,Pt.y,0,0);{Имитировать нажатие левой кнопки мыши}Mouse_Event(MOUSEEVENTF_ABSOLUTEorMOUSEEVENTF_LEFTDOWN,Pt.x,Pt.y,0,0);{Имитируем отпускание левой кнопки мыши}Mouse_Event(MOUSEEVENTF_ABSOLUTEorMOUSEEVENTF_LEFTUP,Pt.x,Pt.y,0,0);end;
В этом примере, когда Button2 кликается, она имитирует событие нажатия левой кнопки мыши в центре Button1 и затем сразу же отпускает кнопку.
В статье описывается использование процедуры mouse_event для имитации событий мыши в программировании на языке Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.