Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/46: Рейтинг темы: голосов - 46, средняя оценка - 4.96
 Аватар для TGrey[WoLf]
42 / 42 / 4
Регистрация: 14.09.2008
Сообщений: 683

Клик мышью по координатам

28.11.2009, 17:06. Показов 9226. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, прочитал статьи по эмуляции клика и такое впечатления, что у все все работает кроме меня)
В общем создал на форме 2 кнопки, по клику на 2 отсылаются сообщения клика по координатам первой кнопки. Но ничего не происходит. Иногда Фаерфокс вообще открывает ни с того ни с сего Попандер.ру сайт оО
Code
1
2
3
4
        
..PostMessage( HWND_BROADCAST, WM_MOUSEMOVE, 0, (LPARAM)MAKELONG(35,40));
        PostMessage( HWND_BROADCAST, WM_LBUTTONDOWN, MK_LBUTTON, (LPARAM)MAKELONG(35,40));
        PostMessage( HWND_BROADCAST, WM_LBUTTONUP, 0, (LPARAM)MAKELONG(35,40));
Что ему не нравится?
Поскольку мне нужно в дальнейшем будет кликать не в форме, то тут посылаю на глобал, но так же пробовал и с Хендлом этой формы и все равно ничего.

Просьба не советовать маус_евенты. Хочу так научится.
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.11.2009, 17:06
Ответы с готовыми решениями:

Клик мышью по заданным координатам
Подскажите как мне кликнуть мышью по координатам. Я отправляю PostMessage(wn,WM_LBUTTONDOWN,0,0) Мне нужно в lParam задать значение...

Клик мышью
Собственно написал программу (на форме по паре Label, Edit, Button и RadioButton) которая через определённое время делает клик в то место...

Клик мышью
Есть примерно такая разметка <div> <img src='......'> <canvas></canvas> </div> img.addEventListener('click',...

9
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
28.11.2009, 17:54
сам-то понял, что сделал?
ты ВСЕМ окнам верхнего уровня посылаешь WM_MOUSEMOVE, WM_LBUTTONDOWN, WM_LBUTTONUP.
само собой, если у тебя открыт FireFox, он тоже получает мув и клик мышки.

что конкретно у тебя не работает?

Не по теме:

в сотый непечатный раз прошу: пишите вы, что хотите получить в итоге.

0
 Аватар для TGrey[WoLf]
42 / 42 / 4
Регистрация: 14.09.2008
Сообщений: 683
28.11.2009, 18:41  [ТС]
Там же написано, что хочу. Хочу сделать программный клик в не формы.
Да возможно оно и посылает всем окнам верхнего уровня те действия, вопрос только почему оно их посылает свернутому фаерфоксу, причем не знаю куда оно там клацало, но после пару десятков кликов на кнопке оно открыло мне столько же окон в браузере.
А то что мне нужно, для начала программно кликнуть на кнопку, так и не получилось.
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
28.11.2009, 18:59
Ну... может, msdn почитать?
или хоть справку по HWND_BROADCAST?
HWND_BROADCAST - Сообщение помещается в очередях всех окон верхнего уровня в системе, включая свернутые, заблокированные или невидимые не имеющие владельца окна, перекрывающие и выскакивающие окна. Сообщение не помещается в очередях дочерних окон.
почитай еще про SendInput(). может то, что ищешь.
0
 Аватар для TGrey[WoLf]
42 / 42 / 4
Регистрация: 14.09.2008
Сообщений: 683
28.11.2009, 19:13  [ТС]
Ясно спасибо, за справку HWND_BROADCAST я читал там шла речь только об видимых окнах.
Ну тем не менее даже так, то какого оно открывает сайт не каждый раз, а иногда вообще ничего не делает. А если посылать только форме, то все равно не клацает.
Не нужно ли преобразовывать координаты которые я указываю в сообщение, для Экрана.

Меня интересует именно этот способ, через посылку сообщений, но за инфу спасибо, я гляну.
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
28.11.2009, 20:19
Цитата Сообщение от TGrey[WoLf
;383159]А если посылать только форме, то все равно не клацает.
естественно.
стандартный обработчик диалогов, на котором формы работают, реагирует на BN_CLICKED и BN_DBL_CLICKED(не уверен в написании, но смысл понятен), а ты их не посылаешь.
А если хочешь посылать сообщения конкретному окну - так ты сначала его хэндл определи.
А потом, координаты - зачем они тебе вообще, если ты не в общую очередь сообщения отправляешь, а конкретному окну? Определяй тогда уж кнопку, и посылай сразу ей. Ей вообще на координаты наплевать.
А если все-таки через общую очередь сообщений - то "цивилизованно" это только через SendInput() и делается.

Не по теме:

как я и писал - нефига не ясно, чего-же ты хочешь получить... :D

0
 Аватар для TGrey[WoLf]
42 / 42 / 4
Регистрация: 14.09.2008
Сообщений: 683
28.11.2009, 21:41  [ТС]
Этот код я всунул в Борланд там стоял обработчик на Клик по кнопке. Если по ней клацать мышой, то выводит сообщение. Программно ничего не выводит))
И BN_CLICKED вроде же и срабатывает при приеме сообщений лбатондаун, лбатонап.
В общем кнопка это тест только для проверки работоспособности программы. В идеале программа должна клацать в любом месте по указанным координатам, чтобы там нибыло. К пример на рабочем столе ярлык выделать если надо, или в любой программе сделать клик по меню тоже по указанным координатам.
Вот возьму для примера браузер и сайт вконтакте. открываю графити и хочу нарисовать точку, тогда в проге ввожу координаты и прога должна просто совершить клики в нужных местах браузера, то есть в флеш окне(графити там вроде флешовское). Или ввести координатый Меню любой программы и чтобы выпало это меню, как будто я лично кликал мышкой. Это как пример, а не основная цель моей работы. Я это делаю чисто для себя хочу понять, как работать с сообщениями эмулируя мышь.

Добавлено через 55 минут
Вот сидел тестил получилось выделять и запускать ярлыки на рабочем столе
C++
1
2
3
4
5
6
7
8
   
/*POINT pt={35,40};
        HWND h = WindowFromPoint(pt);     
PostMessage( h, WM_MOUSEMOVE, 0, (LPARAM)MAKELONG(35,40));
        PostMessage( h, WM_LBUTTONDOWN, MK_LBUTTON, (LPARAM)MAKELONG(35,40));
        PostMessage( h, WM_LBUTTONUP, 0, (LPARAM)MAKELONG(35,40));
        PostMessage( h, WM_LBUTTONDBLCLK, MK_LBUTTON, (LPARAM)MAKELONG(35,40));
        PostMessage( h, WM_LBUTTONUP, 0, (LPARAM)MAKELONG(35,40));*/
Но нажимать кнопку в своей форме по прежнему не хочет. А так же в других приложениях не хочет клацать ничего.
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
29.11.2009, 06:59
ну... еще раз...
ты когда-нибудь замечал, что если нажимать левую кнопку мыши медленно(типа, нажать, подержать пару секунд и отпустить), то кнопки в большинстве программ на это не реагируют?
в тех-же диалогах.
это происходит из того, что сообщение WM_LBUTTONDOWN воспринимается, как команда "Начать выделение", а WM_LBUTTONUP - как команда "Закончить выделение".
и сообщения BN_CLICKED при этом не получается.
непосредственно на WM_LBUTTONDOWN реагируют только браузеры, и рабочий стол, если на нем ActiveDesktop включен.
посылай BN_CLICKED и не парься, изобретатель...
0
 Аватар для TGrey[WoLf]
42 / 42 / 4
Регистрация: 14.09.2008
Сообщений: 683
29.11.2009, 12:43  [ТС]
Так тогда может посылать WM_COMMAND с указанием notif code BN_CLICKED?!
Возможно если я так пошлю, то оно и нажмет кнопку, но тогда по сути получается бредовая программа. Я пытаюсь сделать эмуляцию в любом окне в любое место на любой компонент.
А так тогда только кнопки и клацать.
Так подумал, вспомнил вроде есть программы записывающие действия мыши, а потом воспроизводящие, вот по сути по типу того ходу добиться.

Добавлено через 1 час 41 минуту
Вот нашел статью, где написано, как кликать по нижним окнам.
C++
1
2
3
4
5
6
7
8
9
        POINT pt={50,300};
        POINT pt2={333,347};
        HWND h = WindowFromPoint(pt);
        HWND ch = ChildWindowFromPoint(h, pt2);
        RECT re;
        ::GetWindowRect(ch, &re);
        //ShowMessage(AnsiString(re.left) +" "+ AnsiString(re.top));
        PostMessage( ch, WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(333,347));
        PostMessage( ch, WM_LBUTTONUP, 0, (LPARAM)MAKELONG(333,347));
Правда не очень оптимально оно работает. К примеру попробовал в Контакте поставить точку на стене, а в Фаерфоксе парент окно содержит в себе 6 чилдов, даже не знаю зачем они, но Графити самое нижнее окно. Вот и выходит, чтобы нажать что-то нужно перебрать все окна. А они к тому же не имеют заголовков и у всех один класс. Видимо не получится, просто тыкать мышкой, где хочу.

Бродкаст я прочитал не шлет сообщения Чилдам. Есть ли какой-то оптимальный способ послать всем чилдам сообщения? Или только перебором?
0
 Аватар для TGrey[WoLf]
42 / 42 / 4
Регистрация: 14.09.2008
Сообщений: 683
30.11.2009, 22:33  [ТС]
Пример чего я хочу добиться
webzanacka. ru/soft_tasker_.htm
Эта программа делает клики, выделения в любых окнах, в общем, все то, что я лично делал мышкой.
Как мне добиться простейшего результата повторения действий?

Добавлено через 23 минуты
В общем mouse_event делает, то что мне надо. По видимому чистыми PostMessage такого эффекта не добиться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.11.2009, 22:33
Помогаю со студенческими работами здесь

Клик мышью
Привет! Помогите написать программу, которая делает определенное действие если ,я нажму на определённый объект Не могу забраться с...

Клик мышью в игре
Привет подскажите пожалуйста бат код чтобы просто нажималась левая кнопка мыши, к примеру рас в 0.5 сек. Чтобы код повторялся пока...

Клик мышью в rdp
ос windows написал программу которая кликает мышью, таким образом управляя другой программой. делал я это так: POINT cp; ...

Клик мышью в фоновом приложении
Доброго времени суток товарищи друзья. Возник вопрос - как нажать на определенное место в другой программе (послать нажатие мышью).. Как...

Как эмулировать клик мышью
Как эмулировать клик мышью?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru