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

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

28.11.2009, 17:06. Показов 9186. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru