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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2011, 17:29   #1
Кинельски
Форумчанин
 
Регистрация: 10.03.2010
Сообщений: 109
По умолчанию Клик мышью в свернутом webbrowser

Вот код:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
h:HWND;
Begin
h:=form1.webbrowser1.handle;
Postmessage(h,WM_LBUTTONDOWN,0,(15 shl 16)+50);
Postmessage(h,WM_LBUTTONUP,0,(15 shl 16)+50);
end;
на ссылку не нажимается, но если заменить 'webbrowser1' на 'Button2', на кнопку жмет не зависимо от координат. Подскажите как нажать в бросвере на ссылку.

Последний раз редактировалось Кинельски; 05.02.2011 в 17:38.
Кинельски вне форума Ответить с цитированием
Старый 08.02.2011, 23:40   #2
|{ot
Форумчанин
 
Аватар для |{ot
 
Регистрация: 09.03.2008
Сообщений: 127
По умолчанию

Именно на ссылку в веб-странице?

webbrowser1 - это компонент веб браузера по умолчанию или что это??

Цитата:
(15 shl 16)+50
Зачем пишеш эту константу, и еще вычисляеш ее в процессе выполнения, и где ее взял то?

В последнем параметре сообщения WM_LBUTTONDOWN передается координаты мыши, которые возможно нужны процедуре обработки сообщения в программе. В данном случае они не нужны.

Для уверенности последовательности получения сообщений окном приложения, посылай сообщения функцией SendMessage - она синхронная.

Нажать на кнопку можно так:
1. Получаем любым из способов хендл окна, в котором кнопка располагается (к примеру FindWindow)
2. Потом последовательно получаем хендлы всех родительских элементов данной кнопки (к примеру есть:
Окно (класс TWindow, заголовок "Окно") -> В окне Панель (класс TPanel, заголовок "Панель")-> на панели кнопка (класс TButton, заголовок "Жми")
Ищем это окно по классу или заголовку ф-цией FindWindow, затем получаем хэндл панели, ф-цией FindWindowEx, а затем уже хэндл кнопки.. Ей то и отправляем сообщения.)
3. Добравшись до хэндла кнопки, управляем ею.

Где то так:

Код:
var
  h:HANDLE;
begin
  h:=FindWindow('TWindow',nil);
  if h <> nil then begin
    h=FindWindowEx(h,nil,'TPanel',nil);
    ...
    h=FindWindowEx(h,nil,nil,'Жми');
    ...
    SendMessage(h,WM_LBUTTONDOWN,0,0);
    SendMessage(h,WM_LBUTTONUP,0,0);
  end;
end;

//На паскале не пишу, если что...
Иерархию компонентов можно посмотреть с помощью программы WinDowse

А если нужно именно на ссылку нажать.. то либо получай весь код странички из браузера (или через сокеты) а там уже парси нужную ссылку...
|{ot вне форума Ответить с цитированием
Старый 23.02.2011, 17:47   #3
Кинельски
Форумчанин
 
Регистрация: 10.03.2010
Сообщений: 109
По умолчанию

Не парсинг страницы не подходит,нужно нажать на ява скрипт, вроде делаю также как и все , а он не нажимается, может у кого есть рабочий исходник или уже скомпилированый файлик? Смотрел что происходит через WinSight, максимум чего добился это что черным закрасился квадратик напротив Sell Embedding, а когда вручную нажимаешь закрашиваются все три

Вот рисунок из программы WinSigth
Изображения
Тип файла: gif WINSIGHT.GIF (4.3 Кб, 169 просмотров)

Последний раз редактировалось Stilet; 12.06.2011 в 19:48.
Кинельски вне форума Ответить с цитированием
Старый 12.06.2011, 19:32   #4
NewHorek
 
Регистрация: 18.04.2010
Сообщений: 5
По умолчанию

Что бы реально программно кликнуть где то в webbrowser, или еще чего эмулировать надо сообщения посылать не в хэндл webbrowser а в хэндл IE
Находим хэндл
// функция находит реальный IE
Код:
function GetIEHandle(WebBrowser: TWebbrowser; ClassName: string): HWND;
var
  hwndChild, hwndTmp: HWND;
  oleCtrl: TOleControl;
  szClass: array [0..255] of char;
begin
  oleCtrl :=WebBrowser;
  hwndTmp := oleCtrl.Handle;
  while (true) do
  begin
   hwndChild := GetWindow(hwndTmp, GW_CHILD);
   GetClassName(hwndChild, szClass, SizeOf(szClass));
   if (string(szClass)=ClassName) then
   begin
   Result :=hwndChild;
   Exit;
   end;
   hwndTmp := hwndChild;
  end;
  Result := 0;
end;
ну а затем какое надо сообщение
Код:
var
  H : hwnd;
begin
 H := GetIEHandle(WB,'Internet Explorer_Server');
 SendMessage(H,WM_MOUSEMOVE,0,MakeLong(x,y);
end

Последний раз редактировалось Stilet; 12.06.2011 в 19:50.
NewHorek вне форума Ответить с цитированием
Старый 14.06.2011, 18:05   #5
vhawk
Новичок
Джуниор
 
Регистрация: 14.06.2011
Сообщений: 2
По умолчанию

Цитата:
Сообщение от Кинельски Посмотреть сообщение
Вот код:
Код:
Postmessage(h,WM_LBUTTONDOWN,0,(15 shl 16)+50);
Postmessage(h,WM_LBUTTONUP,0,(15 shl 16)+50);
end;
а что это за координаты и куда их можно применить?
vhawk вне форума Ответить с цитированием
Старый 16.06.2011, 15:43   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

координаты куда вы "кликаете" внутри компонента.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.06.2011, 19:33   #7
Florento
Пользователь
 
Регистрация: 05.02.2011
Сообщений: 35
По умолчанию

Использовал код, который выложил NewHarek. Но появилась другая проблема. Нужен клик в Flash игре. По ссылкам кликает, работает. Но когда открываю сайт игры в WebBrowser, кликать отказывается. В чем может быть проблема? Игра полностью flash.
Florento вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Клик в webbrowser ToDayGoodDay Общие вопросы Delphi 1 12.01.2011 10:21
Эмуляция действий мыши в свернутом окне senia Win Api 12 18.11.2010 16:38
webbrowser клик KoBRaAndrey Работа с сетью в Delphi 6 02.03.2010 02:26
Произвольный клик мышью Lime Безопасность, Шифрование 9 28.11.2009 18:23
Программный клик мышью Аlex Win Api 1 30.06.2008 23:30