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

Как послать нажатие кнопки мыши в окно?

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

Для эмулции нажатия необходимо использывать сигналы:

WM_LBUTTONDOWN
WM_RBUTTONDOWN

Пример:

sendmessage(Handle, WM_LBUTTONDOWN, MK_LBUTTON, x + y shl 16);
sendmessage(Handle, WM_LBUTTONUP, MK_LBUTTON, x + y shl 16);

Автор: Song


Я решил проверить точку нажатия мышки таким вот образом:

...
SetForegroundWindow(WindowUO);
mouse_event(MOUSEEVENTF_MOVE,400,400,0,0);
...

и получилось, что мышка перемещалась не в те координаты(относительно разрешения монитора (800 на 600)) которые я задумал(в не зависимости от местоположения мышки она перемещалась строго по одному направлению на одинаковое расстояние), причем я сделал еще один вариант - dx=100, dy=100, но тогда перемещение мышки произошло в другую сторону(в сторону x=0 y=0 монитора)!

Подскажите плз в чем дело?

Автор ответа: Spawn


Mouse_event программирует не абсолюьные, а относительные координаты.

Чтобы не думалось, просто сначала установите курсор в нужную позицию - SetCursorPos(), а потом делайте клик - Mouse_event()

Автор: Song

Взято с Vingrad.ru http://forum.vingrad.ru

Автор Сон пытается симулировать клик левой кнопки мыши в конкретных координатах (400, 400) внутри окна с обозначением WindowUO. Он использует функцию SetForegroundWindow для привлечения окна к переднему плану и затем вызывает функцию mouse_event для перемещения курсора в желаемое положение.

Однако, вместо того, чтобы переместить курсор в ожидаемое положение (400, 400), он движется в фиксированном направлении, независимо от начального положения мыши. Автор также попытался изменить координаты на (dx=100, dy=100), что привело к перемещению курсора в другом направлении.

Проблема заключается в том, что функция mouse_event использует относительные координаты, а не абсолютные. Это означает, что функция будет перемещать курсор на указанное расстояние от его текущего положения, а не сразу перейти к желаемому положению.

Чтобы решить эту проблему, Сон должен сначала использовать функцию SetCursorPos для установки абсолютного положения курсора в координатах (400, 400) перед вызовом mouse_event. Затем он может симулировать клик левой кнопки мыши с помощью MOUSEEVENTF_LEFTDOWN.

Вот исправленный код:

SetForegroundWindow( WindowUO );
SetCursorPos( 400, 400 ); // Установка курсора в абсолютное положение (400, 400)
mouse_event( MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 );

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

Для эмулирования нажатия кнопки мыши в окне необходимо использовать сигналы WM_LBUTTONDOWN и WM_RBUTTONDOWN, а для перемещения курсора на конкретные координаты - функцию SetCursorPos().


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

Получайте свежие новости и обновления по 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 21:01:06/0.011647939682007/0