Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Программное нажатие кнопки в confirm-окне, Как добраться до кнопки в confirm-окне 
V
    Опции темы
endore
Дата 12.12.2013, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 9.12.2013

Репутация: нет
Всего: нет



Пытаюсь наваять мини-клиент для сайта. Использую WebBrowser. Получалось всё, пока не натолкнулся на проблему программного нажатия на кнопку во всплывающем confirm-окне.
Выполняю
WebBrowser1.OleObject.Document.frames.item(1).document.all.item('targeting',0).click;
и скрипт открывает confirm-окно, доступ к которому никак не могу получить.
Можно ли как-нибудь перехватывать открытие этого окна?
Во всех этих конфирмах всегда нужно нажимать ОК, но при всплытии этого окна фокус, насколько я понял, переходит на него и пока не нажмёшь ОК, выполнение программы останавливается.
Как уже после всплытия можно выполнить дальше программу, чтобы попытаться найти например хэндл кнопки в этом конфирме? Или может можно перехватить его всплытие?
Не знаю как и какими приёмами можно победить этот конфирм. Прошу помощи.
PM MAIL   Вверх
Агрох
Дата 13.12.2013, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 176
Регистрация: 6.4.2013
Где: Москва

Репутация: нет
Всего: 6



Не совсем уверен то ли это, что тебе нужно, но попробуй установить параметр TWebBrouser.Silent = true
--------------------
Putin here, Putin there, Putin almost everywhere!
PM MAIL   Вверх
endore
Дата 15.12.2013, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 9.12.2013

Репутация: нет
Всего: нет



Цитата(Агрох @  13.12.2013,  09:04 Найти цитируемый пост)
 установить параметр TWebBrouser.Silent = true 

это игнор ошибок, на конфирм не влияет
PM MAIL   Вверх
endore
Дата 15.12.2013, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 9.12.2013

Репутация: нет
Всего: нет



Натолкнулся на интересное замечание:
Цитата

Диалоговые окна alert (а также confirm и prompt) обладают некоторыми странными свойствами.

Они синхронны в том смысле, что выполнение скрипта, вызвавшего этот диалог, замораживается до закрытия диалога. Скрипт ожидает завершения функции alert(), прежде чем продолжить выполнение.

Однако некоторые браузеры позволяют производить обработку событий до тех пор, пока диалог виден на экране и ожидает пользовательских действий. Это означает, что пока один скрипт заморожен, ожидая конца выполнения функции alert, другая функция может быть выполнена в процессе обработки другого события.

События пользовательского интерфейса, такие как mouseup и click, не будут возникать в момент исполнения alert, поскольку диалог является модальным и перехватывает весь пользовательский ввод, однако не-пользовательские события, такие как загрузка страницы, отложенный код и обработчики результата асинхронных запросов XMLHttpRequest, могут возникнуть в это время.

Может кому-то придёт в голову как это использовать для решения вопроса...
PM MAIL   Вверх
endore
Дата 4.1.2014, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 9.12.2013

Репутация: нет
Всего: нет



Решил так:

по таймеру поставил процедуру control 

Код

//-------------------закрытие--confirm------------------

function EnumWindowsProc(hWindow : hWnd;lParam  : LongInt) : Bool
{$IFDEF Win32}
stdcall;
{$ELSE} ;
export;
{$ENDIF}
var   lpBuffer : PChar;
WindowCaptionFound : bool;
ClassNameFound : bool;
begin
GetMem(lpBuffer, 255);
Result := True;
WindowCaptionFound := False;
ClassNameFound := False;
try
if GetWindowText(hWindow, lpBuffer, 255) > 0 then
if Pos(PFindWindowStruct(lParam).Caption, StrPas(lpBuffer)) > 0
then WindowCaptionFound := true;
if PFindWindowStruct(lParam).ClassName = '' then
ClassNameFound := True else         
if GetClassName(hWindow, lpBuffer, 255) > 0 then
if Pos(PFindWindowStruct(lParam).ClassName, StrPas(lpBuffer)) > 0 then
ClassNameFound := True;
if (WindowCaptionFound and ClassNameFound) then
begin
 PFindWindowStruct(lParam).WindowHandle := hWindow;
 Result := False;
end;
finally
 FreeMem(lpBuffer, sizeof(lpBuffer^));
end;
end;


function FindAWindow(Caption, ClassName : string) : THandle;
var   WindowInfo : TFindWindowStruct;
begin
 with WindowInfo do
begin
 Caption := 'Сообщение с веб-страницы';
 ClassName := '32770';
 WindowHandle := 0;
 EnumWindows(@EnumWindowsProc, LongInt(@WindowInfo));
 FindAWindow := WindowHandle;
end;
end;

procedure SimulateKeystroke(Key : byte; extra : DWORD);
begin
        keybd_event(Key,extra,0,0);
        keybd_event(Key,extra,KEYEVENTF_KEYUP,0);
end;

procedure TSC.control(Sender: TObject);
var   TheWindowHandle : THandle;
begin   TheWindowHandle := FindAWindow('Сообщение с веб-страницы', '32770');
 if TheWindowHandle = 0 then
 exit else
 BringWindowToTop(TheWindowHandle);
 SimulateKeystroke(VK_RETURN, 0);
end;

//-------------------END---закрытие--confirm--------




работает на ура
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0644 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.