Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как сказать "ОК" диалоговому окну?


Автор: Diver 14.1.2007, 23:33
Всем привет! У меня возникла такая проблема...

Компьютер соединяется с Интернет через прокси-сервер и при загрузке каждой новой страницы пребует ввод логина и сетевого пароля. Вводим, жмем ОК - и вроде бы все нормально, но только до тех пор пока не переходиш по следующей ссылке. Использую браузер Mozilla FireFox - там в выскакивающем окошке есть галочка "Использовать менеджер паролей чтобы запомнить данный пароль". Даже в таком случае запрос постоянно появляется при переходе на новую страницу...

Задача (как себе представляю ее я) ... написать маленькую программу которая бы искала в системе данное окно и нажимала кнопку ОК. Требуется перебрать все окна в системе и послать сообщение... но как в системе отрабатывать диалоговые окна.
Буду признателен за любые советы и предложения!

Автор: Rondo 15.1.2007, 08:54
Код

var
  h: hwnd;
begin
  h := FindWindow(nil, 'Information'); //Находим диалоговое окно
  if h <> 0 then
    h := FindWindowEx(h, 0, nil, 'OK'); //находим кнопку на окне
  SendMessage(h, BM_CLICK, 0, 1); //Отсылаем мессагу для клика
  ...
end;

Автор: CatATonik 15.1.2007, 09:26
Можно проще:

Код

ModalResult := mrOK;

Автор: Diver 15.1.2007, 13:45
Интересные предложения. Попробовал первый вариант - с обычными формами работает на ура, но вот с диалоговыми как-то не очень. К примеру: не получается нажать кнопку "да" в окошке которое выдает Paint  когда пытаешься его закрыть, а рисунок не сохранен... Как быть?

А на счет ModalResult := mrOK; чего-то не понял как его использовать.

Автор: Insert 15.1.2007, 14:03
А не легче настроить браузер на работу через прокси, у меня на работе тож мозилла, тоже прокси: 
"Настройки - Дополнительно-Сщединение - Настроить - Установить настройки прокси вручную" вводишь там все как полагается, ничего не должен спрашивать.

Автор: CatATonik 15.1.2007, 14:07
Насчет ModalResult это я погорячился, когда смотрел тему, там текст сообщения другой был. 
Интересно кстати, почему?

Автор: Winprogrammer 15.1.2007, 14:13
Цитата(CatATonik @ 15.1.2007,  09:26)
Можно проще:

Код

ModalResult := mrOK;

Не стоит забывать, что эта форма виндовая. И ей так просто нельзя сделать.

На мой взгляд нужно делать как сказал Rondo.

Автор: Diver 15.1.2007, 14:21
В том то все и дело, пример работает практически на всех окнах за исключением окошек типа MessageBox...

to  Insert 
Прикси и настроен вручную, но тем не менее проблема возникает...

Автор: 13th 15.1.2007, 17:05
Вот код ...

Код

procedure TMainForm.TimerTimer(Sender: TObject);
var wnd : HWND;
    point  : TPoint;
    rect   : TRect;
    dX, dY : integer;
begin
  wnd := FindWindow(nil,'Paint');
  if wnd <> 0 then
  begin
    BringWindowToTop(wnd);
    GetCursorPos(point);
    GetWindowRect(wnd, rect);
    dX:=50; dY:=100;
    SetCursorPos(rect.Left+dX,rect.Top+dY);
    Mouse_Event(MouseEventF_LeftDown,rect.Left+dX,rect.Top+dY,0,0);
    Mouse_Event(MouseEventF_LeftUp,rect.Left+dX,rect.Top+dY,0,0);
    SetCursorPos(point.X, point.Y);
  end;
end;


Может и не совсем спортивно - зато очень эффективно. Проверено на Paint'е... 
Закиньте этот код в Delphi и запустите (интервал таймера ~10). 
Создайте рисунок в Painte, намалюйте там чего-нибудь и попробуйте закрыть...

Автор: Diver 15.1.2007, 18:05
Всем спасибо (особенно 13th)... все получается. Конечно это решение под конкретное окно, но зато работает 100%.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)