Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

WM_MOVE & WM_LBUTTONDOWN & SendMessage

386
24 сентября 2006 года
newcss
297 / / 05.04.2005
Вообщем проблемка такого плана. Есть окошко, там есть определенные кнопочки, координаты которых известны. Хочется с иммитировать передвижение курсора мышки на кнопочку и нажать ее. При этом визуально курсор мышки не должен двигаться.
Почитав немного я набрел на такуб весчь - в окне приложения программно можно реализовать определенные события при помощи
SendMessage.
 
Код:
POINT Point;
 Point.x=pos[1]+Form1->Left+66;
 Point.y=pos[0]+Form1->Top+230;
// перемещаем мышку в координаты
 SendMessage(Form1->Handle,WM_MOVE,0,(LPARAM) &Point);      
// нажимаем кнопку мышки
 SendMessage(Form1->Handle,WM_LBUTTONDOWN,MK_LBUTTON,(LPARAM) &Point);
//отпускаем кнопку мышки
 SendMessage(Form1->Handle,WM_LBUTTONUP,MK_LBUTTON,(LPARAM) &Point);


Вообщем вот так вот делаю. Но кнопочка почему-то ненажимается. МОжет я что-то делаю не так или что-то забыл?
7.8K
24 сентября 2006 года
DrCoder
106 / / 27.01.2006
Может быть не нужно иммитировать передвижение мыши, а просто использовать метод Click (или типа него) у кнопочки ?
1.9K
24 сентября 2006 года
SABROG
242 / / 26.01.2006
Что-то ты нашаманил. Зачем посылать сообщение о клике мышки форме ???
Нам надо посылать сообщение кнопке ! У сообщения WM_LBUTTONUP нет флага MK_LBUTTON ! Почему SendMessage ? В твоем случае ответа на сообщение прийти не должно, поэтому ждать пока завершится функция обработки сообщения не нужно. А значит достаточно использовать PostMessage. Нам нужен только Handle кнопки, чтобы сэмулировать нажатие. Зачем играться с координатами вообще ? Если программа чужая, то посмотри в сторону функций WindowFromPoint и ChildWindowFromPoint, ну и FindWindow/FindWindiwEx/EnumWindows. Почему надо нажатие мышкой эмулировать, а не пробелом или Enter'ом ? В общем вот:

 
Код:
::PostMessage(Button1->Handle,WM_LBUTTONDOWN,MK_LBUTTON,0);
::PostMessage(Button1->Handle,WM_LBUTTONUP,0,0);
386
24 сентября 2006 года
newcss
297 / / 05.04.2005
Хорошо... а Если в программе той флеш? И кнопку можно нажать только зная ее координаты?
Грубо говоря есть штмл страничка, на ней флеш игрушка, в которой есть кнопочки.... Как нажать кнопочку во флеш игрушке?*
1.9K
24 сентября 2006 года
SABROG
242 / / 26.01.2006
[QUOTE=newcss]Хорошо... а Если в программе той флеш? И кнопку можно нажать только зная ее координаты?
Грубо говоря есть штмл страничка, на ней флеш игрушка, в которой есть кнопочки.... Как нажать кнопочку во флеш игрушке?*[/QUOTE]
mouse_event
386
24 сентября 2006 года
newcss
297 / / 05.04.2005
Да я бы с иммитировал клик этот.... но как добраЦЦа до кнопки которая во флеш ролике =)
386
24 сентября 2006 года
newcss
297 / / 05.04.2005
пробовал....
mouse_event(MOUSEEVENTF_LEFTDOWN,pos[1]+Form1->Left+66,pos[0]+Form1->Top+230,0,0); mouse_event(MOUSEEVENTF_LEFTUP,pos[1]+Form1->Left+66,pos[0]+Form1->Top+230,0,0);

не работает =(

Если курсор навести на кнопку, то срабатывает =(
1.9K
24 сентября 2006 года
SABROG
242 / / 26.01.2006
У тебя скорее всего косяк с переводом клиентских координат. Вот только что попробывал, все нажалось:

 
Код:
POINT pt;
pt.x = (long)Button1->Left; // пихаем клиентские координаты
pt.y = (long)Button1->Top;
::ClientToScreen(Handle,&pt); // конвертим клиентские коодиранты главной формы в глобальные экранные
::SetCursorPos(pt.x, pt.y); // установим позицию курсора мышки на верхний левый угол кнопки
::mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
::mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);


Так работает, но перемещение курсора видно. У mouse_event координаты передаются в какой-то нестандартном формате "mickeys", где экран делится на пиксели 65535x65535, при переводе стандартных координат в Mickeys из-за погрешности в округлении позиция курсора может быть не на нужной точке.
386
24 сентября 2006 года
newcss
297 / / 05.04.2005
а не двигая курсор низя? Мне нуно так чтобы прога работала в фоновом режиме, грубо говоря свернутая =), а параллельно я бы сидел и писал посты на форумах =)
Про СетКурсор я знаю =)
Для меня важно именно чтобы нажать кнопочку =).
[COLOR=#0000bb]MOUSEEVENTF_LEFTDOWN[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000bb]0[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000bb]0[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000bb]0[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000bb]0[/COLOR]
[COLOR=#0000bb]вот тут параметры, один из них отвечает за координаты, или я не прав?*[/COLOR]
1.9K
25 сентября 2006 года
SABROG
242 / / 26.01.2006
Пишешь очередную кликалку по баннерам, типа цент за клик ;) ?
Параметры координат влияют только если установлены флаги на перемещение курсора. Без установки курсора в нужную позицию произвести клик нельзя. А т.к. эта флешка, то вообще непонятно обрабатывает она хоть какие-то виндовые сообщения или нет.
386
25 сентября 2006 года
newcss
297 / / 05.04.2005
грубо говоря да, кликалку....
Хм... Т.е. обязательно нада дергать курсор?* а через АктивX ни как? Слух...
флешка обмениваеЦЦа в режиме реального времени данными с сервером, если не ошибаюсь то через метод ПОст. Как можно перехватить то что она шлет браузеру?
Я юзаю CppWebBrowser
1.9K
25 сентября 2006 года
SABROG
242 / / 26.01.2006
[QUOTE=newcss]грубо говоря да, кликалку....
Хм... Т.е. обязательно нада дергать курсор?* а через АктивX ни как? Слух...
флешка обмениваеЦЦа в режиме реального времени данными с сервером, если не ошибаюсь то через метод ПОст. Как можно перехватить то что она шлет браузеру?
Я юзаю CppWebBrowser[/QUOTE]
Сниффером посмотри что получает и что отсылает.
386
25 сентября 2006 года
newcss
297 / / 05.04.2005
а где его взять и как им пользоваЦЦа, есть какие-нить ссылки толковые по описанию?
Я просто думал что в любой точке экрана моно программно создать событие... лан, придеЦЦа поломать голову.... Хотя где-то видел что флешкой программно из билдера управляют, правда запуск и остановку....
1.9K
25 сентября 2006 года
SABROG
242 / / 26.01.2006
Насчет ActiveX, посмотри у него событие FSCommand.

http://www.adobe.com/support/flash/publishexport/scriptingwithflash/scriptingwithflash_03.html
http://www.delphiflash.com - тут посмотри "TShockwaveFlashEx methods", у этого компонента есть события OnClick.
240
25 сентября 2006 года
aks
2.5K / / 14.07.2006
Цитата:
а где его взять и как им пользоваЦЦа, есть какие-нить ссылки толковые по описанию?


Возьми например Ethereal
http://www.ethereal.com/

Лови TCP пакеты с твоей программы и анализируй. Вобще флэшь насколько я помню может как просто делать HTTP запросы так и создавать TCP сокеты на любой порт выше 1024. Есть еще там возможность сетевого соединение по RTMP протоколу, но там помоему только видео можно передавать. Так что анализируй траффик и напиши потом вручную эти запросы.
Еще помоему есть какието декодировщики флэшевого файла обратно в исходники. Поищи в гугле на предмет декодирования.

246
25 сентября 2006 года
GIZMO
1.8K / / 30.07.2004
[QUOTE=newcss]Да я бы с иммитировал клик этот.... но как добраЦЦа до кнопки которая во флеш ролике =)[/QUOTE]
Дак может найти свою флешу в коллекции OBJECT и попробовать нажать на кнопку - IHTMLEventObj?
386
25 сентября 2006 года
newcss
297 / / 05.04.2005
[quote=GIZMO]Дак может найти свою флешу в коллекции OBJECT и попробовать нажать на кнопку - IHTMLEventObj?[/quote]

Хм.... а как в Евент объекте найти кнопочку??? Тупым циклом?
1.9K
25 сентября 2006 года
SABROG
242 / / 26.01.2006
Что показал сниффер ?
386
26 сентября 2006 года
newcss
297 / / 05.04.2005
Ща пока не смотрел ща бум разбираЦЦа что это такое и как оно работает.... Пока хотел сделать тупо чтобы наводил курсор....SetCursorPos. Далее делал клик мышой.... и убирал курсор....Но тут новый трабл вылез =( Ставит курсор в нужную координату, кликает, убирает курсор. И все =( боше функция работать не хочет =( ставить курсор и жать на кнопочку =(...... АпздеЦ =(
11K
04 июля 2008 года
amorphius
22 / / 13.03.2006
народ, меня оч интересует эта тема, так как пишу нечто подобное. К сожалению, я еще далек от всего о чем вы писали. Для написания таких прог, я смотрю, надо знать много функций и знать систему виндовых сообщений. Посоветуйте плиз хороший справочник, в которых описываются разные сообщения, их параметры. Гугл не предлагать
386
19 октября 2008 года
newcss
297 / / 05.04.2005
Цитата: amorphius
Посоветуйте плиз хороший справочник, в которых описываются разные сообщения, их параметры. Гугл не предлагать


Книг по данной тематике я не встречал... Есть что-то похожее, но там вообще полные дебри углубляюшиеся в устройство Винды, перехват функций с помощью инжектирования и прочей лабуды.
Короче из справочников - MSDN =) только.
Чо почитать - копать на форумах (попробуй за бугром поискать, на отечественных форумах достаточно мало инфы по этой теме), искать решение самому.

386
20 октября 2008 года
newcss
297 / / 05.04.2005
 
Код:
IHTMLElementCollection *pAll = NULL;
   if(SUCCEEDED(iHTMLDoc2_El->get_all(&pAll)) && pAll)
{
......
}


Вообщем я нашел флешку в IHTMLElementCollection по ее имени... получил на нее IDispatch. Как теперь используя IDispatch получить HWND либо послать SendMessage элементу этому? ( ппц. Чувствую себя извращенцем =(
65K
30 октября 2010 года
walkmn
1 / / 30.10.2010
У меня точно такая же проблемма возникла!!! Нужно управлять мышкой в неактивном окне программы, мне всетаки подсказали что можно это реализовать, но конкретного примера не привели.

Проблема была решена? кто может подробно на примере показать как управлять мышью в неактивном окне:confused:
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог