Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];

Вниз

Как нажать на кнопку внутри Flash ролика?   Найти похожие ветки 

 
ZDima ©   (2004-06-06 18:46) [0]

Здравствуйте, уважаемые программисты.
У меня возникла такая задача:
Есть окно Internet Explorer-а с flash роликом внутри, и мне нужно из моего приложения нажать на кнопку в этом ролике.
Пробовал как обычно т.е.
PostMessage(dddddd,WM_LBUTTONDOWN,MK_LBUTTON,MakeLong(SpinEdit3.Value,SpinEdit4.Value));
PostMessage(dddddd,WM_LBUTTONUP,MK_LBUTTON,MakeLong(SpinEdit3.Value,SpinEdit4.Value));

Где dddddd – handle окна флешь ролика (класс MacromediaFlashPlayerActiveX)
SpinEdit3.Value, SpinEdit4.Value – координаты мыши.
Не помогает :(
Посмотрел программой Microsoft Spy++ какие сообщения приходят окну dddddd при нажатии – вот его лог (без сообщений repaint и т.п.):
<00001> 00120182 S .....................................WM_MOUSEACTIVATE hwndTopLevel:001501F4 nHittest:HTCLIENT uMsg:WM_LBUTTONDOWN
<00002> 00120182 R .....................................WM_MOUSEACTIVATE fuActivate:MA_ACTIVATE
<00003> 00120182 S .....................................WM_NCPAINT hrgn:E70407A5
<00004> 00120182 R .....................................WM_NCPAINT
<00005> 00120182 S .....................................WM_ERASEBKGND hdc:B1010A96
<00006> 00120182 R .....................................WM_ERASEBKGND fErased:False
<00007> 00120182 P WM_LBUTTONDOWN fwKeys:MK_LBUTTON xPos:568 yPos:309
<00008> 00120182 S .......................................WM_SETFOCUS hwndLoseFocus:00250288
<00009> 00120182 R .......................................WM_SETFOCUS
<00010> 00120182 P WM_LBUTTONUP fwKeys:0000 xPos:568 yPos:309
<00011> 00120182 S .......................................WM_CAPTURECHANGED hwndNewCapture:00000000
<00012> 00120182 R .......................................WM_CAPTURECHANGED
<00013> 00120182 S .........................................WM_KILLFOCUS hwndGetFocus:(null)
<00014> 00120182 R .........................................WM_KILLFOCUS
Сделал, чтоб моя программа посылала точно то же, но без результатов :(
Люди, Като что посоветует?


 
GanibalLector ©   (2004-06-06 19:42) [1]

IMHO не возможно


 
GanibalLector ©   (2004-06-06 19:49) [2]

Почему???Да потому,что ни IE ни Flash не имеют хендлов внутренних кнопок и прочего.Единственное,так это хендл окна IE and Flash,но не более.

З.Ы. Хочешь сам проверь.Найди сканер окон...да потыкай на кнопки свои.


 
ZDima ©   (2004-06-06 20:25) [3]

да знаю я, что не у них хендлов, но виндос же посылает им как-то сигналы, что мышь нажали! или по твоему IE сам догадываеться?


 
GanibalLector ©   (2004-06-06 20:31) [4]

2 ZDima
Не знаю,как тебе обьяснить это явление,но там(в ИЕ) все по другому.IMHO, твоя задача нерешаемая.


 
Sanek_metaller ©   (2004-06-06 20:38) [5]

Как говорили:у флэш кнопки нет хэндлера,и полюбому кнопка не сможет принять мессагу,просто не поймет,язык то скриптовый.
Возможный вариант решения проблемы:написать письмо компании Macromedia:)


 
ZDima ©   (2004-06-06 21:08) [6]

Понятно, что кнопка не может принять сообщение, т.к. кнопка - это не окно, но она и не должна ничего принимать т.к. это флеш ролик и кнопка там бутафорная - IMHO смо окно  MacromediaFlashPlayerActiveX принимает месаги от винды и обрабатывает их - надо знать какие месаги или параметры. Ведь всё = кому-то когда ты физически наживаешь на мышь винда посылает кому-то сообщение об этом и кнопка в ролике "нажимаеться" или я не прав и еть ещё какой-то способ узнать о нажатии клавиши мыши не используя сообщения?


 
nikkie ©   (2004-06-06 22:05) [7]

попробуй функцию mouse_event


 
ZDima ©   (2004-06-06 23:46) [8]

nikkie - а поподробней


 
Elf ©   (2004-06-07 00:41) [9]

2 GanibalLector:
// IMHO, твоя задача нерешаемая.

Почему сразу не решаемая?
Есть вариант решения. То есть два.

Первый: мы знаем координаты этой кнопки на экране.
Вариант: чего проще - эмулируем для броузера нажатие мыши в этой точке.

Второй: мы НЕ знаем координат, они меняются, скроллятся итд. Знаем внешний вид этой кнопки(микроскриншот).
Вариант: делаем общий скриншот экрана, ищем кнопку(будет идеальное совпвдение, цвета ведь никак не искажаются). Опять таки "кликаем" броузеру в ту точку. Вот и все.
Да ко второму: нужно на время скриншота убирать мышь и максисимизировать окно, чтобы не получилось несоответствия.


 
Sanek_metaller ©   (2004-06-07 00:52) [10]

А как кликнуть в определенную точку?


 
GanibalLector ©   (2004-06-07 01:56) [11]

2 Elf ©   (07.06.04 00:41) [9]
Это все от Лукавого...


 
nikkie ©   (2004-06-07 02:57) [12]

ну примерно так:

 RX := GetSystemMetrics(SM_CXSCREEN);
 RY := GetSystemMetrics(SM_CYSCREEN);
 mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE,
   X * 65536 div RX, Y * 65536 div RY, 0, 0);
 mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
 mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);

кликает в точку с координатами (X,Y). понятное дело окно, в которое хотим кликнуть, надо вывести на передний план.


 
ZDima ©   (2004-06-07 15:11) [13]

to nikkie>Спасибо огромное - работает. Я считаю эту тему закрытой. Координаты ролика и кнопки я знаю - ролик на весь экран и не прокручиваеться -> они постоянны.
Я бы даже упростил этот код -
SetCursorPos(x,y);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);


 
ZDima ©   (2004-06-07 15:13) [14]

для Elf - можно узнать координаты окна с флеш роликом, его размеры через GetWindowRect и расчитать координаты кнопки :)


 
Elf ©   (2004-06-07 20:32) [15]

Все равно так красивее.

2GanibalLector
А почему? Так ведь можно нажать кнопку даже если она из вредности ставится абсолютно по рандому.


 
GanibalLector ©   (2004-06-07 20:35) [16]

2 Elf ©   (07.06.04 20:32) [15]
Да потому,что не всегда известны координаты кнопок и прочей чепухи.Или еще вариант,предположим ТАМ две кнопки :Play and Exit.И что,тоже рандомом нажимать???


 
Elf ©   (2004-06-07 20:41) [17]

2Всем
Люди! Вы чего! Зачем так мудрить с кликом!
Посылаем IE два сообщения и всё!

...
hwnd:=FindWindow("MastDaj Explorer"); // или как там
LOWORD(lParam):=x;
HIWORD(lParam):=y;
SendMessage(hwnd,WM_LBUTTONDOWN,lParam,wParam);
SendMessage(hwnd,WM_LBUTTONUP,lParam,wParam);
...


 
Sanek_metaller ©   (2004-06-07 21:38) [18]

To Elf
Кстати Caption окна Explorer"a:=то что между тегами <title></title>+Microsoft Internet explorer;
Ну а если не знаешь координатов кнопки,а она анимированная?
ЗЫ:Must Die;


 
ZDima ©   (2004-06-07 22:56) [19]

Elf, ты мою первую месагу читал? SendMessage(hwnd,WM_LBUTTONDOWN,lParam,wParam); - не работает!
Sanek_metaller, если ты не знаешь координат кнопки, тогда зачем на неё наживать? А ещё есть вариант, как-нибудь из памяти флешь подпрограммы считать координаты - где она там рисует :)
Но это уже из области фантастики и иррационального...


 
akvilon ©   (2004-06-07 23:25) [20]

бывает же ... :)


 
Elf ©   (2004-06-08 12:18) [21]

ZDima, вопрос на засыпку:
по твоему lParam MK_BUTTON
а wParam координаты?

Выдержка из WinAPI Help


WM_LBUTTONDOWN  
fwKeys = wParam;        // key flags
xPos = LOWORD(lParam);  // horizontal position of cursor
yPos = HIWORD(lParam);  // vertical position of cursor


Parameters

fwKeys

Value of wParam. Indicates whether various virtual keys are down. This parameter can be any combination of the following values:

Value Description
MK_CONTROL Set if the CTRL key is down.
MK_LBUTTON Set if the left mouse button is down.
MK_MBUTTON Set if the middle mouse button is down.
MK_RBUTTON Set if the right mouse button is down.
MK_SHIFT Set if the SHIFT key is down.


xPos

Value of the low-order word of lParam. Specifies the x-coordinate of the cursor. The coordinate is relative to the upper-left corner of the client area.

yPos

Value of the high-order word of lParam. Specifies the y-coordinate of the cursor. The coordinate is relative to the upper-left corner of the client area.


Я думаю не работало.

2Sanek_metaller
ОК. Можно окно искать по классу.


 
nikkie ©   (2004-06-08 14:06) [22]

>Elf
у тебя wParam и lParam перепутаны местами.


 
ZDima ©   (2004-06-08 15:12) [23]

Elf, nikkie - да какая разница - я и так и так пробовал - не работает! Я для того Spy++ и юзал, чтоб эти параметры точно передать и передовал всё байт в байт!



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.035 c
4-1086254243
Вася
2004-06-03 13:17
2004.07.18
Как определить наличие принтера в системе


14-1088168177
DeadMeat
2004-06-25 16:56
2004.07.18
Загадка


1-1088800076
Theli
2004-07-03 00:27
2004.07.18
ComboBox и расширения файлов


6-1085038174
Bizons
2004-05-20 11:29
2004.07.18
Proxy


11-1077629827
<Falcon>
2004-02-24 16:37
2004.07.18
Splash форма и AlphaBlend





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский