Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как использовать процедуру mouse_event для имитации событий мыши

Delphi , ОС и Железо , Мышка и Курсор

Как использовать процедуру 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 кликается для выполнения этих действий.

Вот что каждый раздел делает:

  1. Application.ProcessMessages: эта строка приостанавливает выполнение программы на короткое время, чтобы позволить другим сообщениям (событиям) быть обработанными. Это важно при имитации событий мыши, потому что оно предотвращает блокировку цикла событий.
  2. Pt.x и Pt.y: эти переменные хранят координаты центра Button1. Расчет основан на свойстве left, top, width и height кнопки.
  3. ClientToScreen(Pt): эта функция преобразует клиентские координаты (относительные к форме) в экранные координаты (абсолютные).
  4. Round(Pt.x * (65535 / Screen.Width)) и Round(Pt.y * (65535 / Screen.Height)): эти строки преобразуют абсолютные экранные координаты в "mickeys", которые являются единицей измерения для движения мыши на Windows. Формула, используемая в этом расчете, выглядит следующим образом: (screen_width/height) * 65535, где screen_width и screen_height представляют собой текущую ширину и высоту экрана.
  5. Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE, Pt.x, Pt.y, 0, 0): эта строка имитирует событие перемещения мыши в указанных координатах. Флаг MOUSEEVENTF_ABSOLUTE указывает, что перемещение происходит в абсолютных координатах, а аргументы Pt.x и Pt.y指定уют новую позицию курсора.
  6. Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, Pt.x, Pt.y, 0, 0): эта строка имитирует событие нажатия левой кнопки мыши в указанных координатах.
  7. Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, Pt.x, Pt.y, 0, 0): эта строка имитирует событие отпускания левой кнопки мыши в указанных координатах.

Вот пример использования этого кода для имитации событий мыши:

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;

В этом примере, когда Button2 кликается, она имитирует событие нажатия левой кнопки мыши в центре Button1 и затем сразу же отпускает кнопку.

В статье описывается использование процедуры mouse_event для имитации событий мыши в программировании на языке Delphi.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Мышка и Курсор ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-17 20:48:43/0.0037720203399658/0