Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2006, 13:04   #1
Megabotans
 
Регистрация: 24.12.2006
Сообщений: 4
По умолчанию Как программно вызвать щелчок мышью в TWebBrowser

Пытаюсь функцией sendmessage (mouse_event мне не подходит) вызвать клик мышью в WebBrowser на форме.
Вот такой код:
Код:
procedure TForm1.Button4Click(Sender: TObject);
var Pt: TPoint;
begin
  Pt.x := WebBrowser1.Left + (WebBrowser1.Width div 2)-300;
  Pt.y := WebBrowser1.Top + (WebBrowser1.Height div 2);
  Pt := ClientToScreen(Pt);
  
  Pt.x := Round(Pt.x * (65535 / Screen.Width));
  Pt.y := Round(Pt.y * (65535 / Screen.Height));
  
 //Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE, Pt.x, Pt.y, 0, 0);
  
  SendMessage(Form1.WebBrowser1.Handle, WM_LBUTTONDOWN, 0, MakeLParam(Pt.x,Pt.y));
  SendMessage(Form1.WebBrowser1.Handle, WM_LBUTTONUP, 0, MakeLParam(Pt.x,Pt.y));
   //PostMessage(WebBrowser1.Handle,WM_LBUTTONDOWN, MK_LBUTTON, makelong(Pt.x,Pt.Y));
   //PostMessage(WebBrowser1.Handle,WM_LBUTTONUP, 0, makelong(Pt.x,Pt.Y));
end;
Если вместо Form1.WebBrowser1.Handle поставить Form1.Button3.Handle, то кнопка Button3 будет нормально нажиматься, а WebBrowser никак не реагирует (закомментированный вариант тоже не подходит).
Координаты я пробовал нулевые задавать - ничего не меняется.
Может в Interner Explorer защита от подобных действий стоит? Я уже сталкивался с тем, что в этом компоненте запрещён доступ к телу фрейма, если домен фрейма не совпадает с доменом родительского документа.
Может кто меня научит как с такими нюансами справляться?

Ребят, подскажите, плиз. Очень нужно.
Наверняка ведь можно с помощью Win API симулировать клик мышкой, не двигая при этом настоящий курсор.
Это мне нужно для того, чтобы для дистанционной системы обучения брать научный контент у сторонних сайтов, для генерации которого используются события JavaScript (OnMouseOver, OnMouseClick).
Вызвать JavaScript-функции событий непосредственно можно, но будет гораздо сложнее.
Megabotans вне форума Ответить с цитированием
Старый 27.12.2006, 09:24   #2
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

А тебя интересует клик на конкретном месте webbrowser-а ? или просто на комопненте ?
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 27.12.2006, 16:06   #3
Megabotan
Пользователь
 
Регистрация: 30.11.2006
Сообщений: 11
По умолчанию

Именно на конкретном месте. Как симулировать клик на конкретном объекте через интерфейс IHTMLdocument2 мне известно, но дело в том, что нужные мне ссылки находятся в iframe, домен которого не совпадает с доменом родительского документа, посему доступ к телу iframe закрыт. Вот и приходится искать способ симуляции действий мыши.
Megabotan вне форума Ответить с цитированием
Старый 12.12.2010, 08:24   #4
stlcrash
Форумчанин
 
Регистрация: 04.07.2010
Сообщений: 131
По умолчанию

Код:
var
BrowserH:HWND;
begin
BrowserH:=Webbrowser1.handle;
PostMessage(BrowserH,WM_LBUTTONDOWN,0,XY);
PostMessage( BrowserH,WM_SETCURSOR,BrowserH,MakeLong(HTCLIENT,WM_LBUTTONDOWN));
PostMessage(BrowserH,WM_LBUTTONUP,0,XY);
PostMessage( BrowserH,WM_SETCURSOR,BrowserH,MakeLong(HTCLIENT,WM_LBUTTONUP));
end;
PS браузер может содержать внутри себя другие объекты, например SWF файлы имеют свой хендл, его вытащить тоже несложно...

Цитата:
Pt.x := Round(Pt.x * (65535 / Screen.Width));
Pt.y := Round(Pt.y * (65535 / Screen.Height));
Если в хендл тычишь, закоменти эти строки...

Последний раз редактировалось stlcrash; 12.12.2010 в 08:26.
stlcrash вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как программно вызвать Dial Up Helg Работа с сетью в Delphi 4 01.04.2009 23:05
Как программно вызвать окно завершения работы UfoRoot Win Api 4 21.01.2009 11:15
Вызвать IPConfig программно Garacio_cain Работа с сетью в Delphi 3 13.01.2009 16:26
Как вызвать стандартную таблицу символов Windows программно? SkAndrew Общие вопросы Delphi 11 13.04.2008 14:47
Как обработать событи, щелчок на кнопке мыши? proglamer Паскаль, Turbo Pascal, PascalABC.NET 10 13.11.2007 18:57