Что нового

[Автоматизация] Выход из скрипта, если не существует окна IE с заданным URL

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
AngryFlay
просто закрываем этот экземпляр IE
Я не пойму. Вам нужно закрыть окно IE, в адресной строке которого присутствует "login"? И после этого завершить скрипт независимо от наличия других окон IE?


Добавлено:
Сообщение автоматически объединено:

Так?
Код:
While Sleep(3000)
  $aList = WinList("[class:IEFrame]")
  For $i = 1 To $aList[0][0]
    $sURL = ControlGetText($aList[$i][1], "", "Edit1")
    If StringInStr($sURL, "login") Then
      WinClose($aList[$i][1])
      Exit
    EndIf
  Next
WEnd
 
Автор
A

AngryFlay

Новичок
Сообщения
17
Репутация
0
InnI сказал(а):
AngryFlay
просто закрываем этот экземпляр IE
Я не пойму. Вам нужно закрыть окно IE, в адресной строке которого присутствует "login"? И после этого завершить скрипт независимо от наличия других окон IE?
Да все верно. Но только нужно чтобы то что в первом варианте тоже осталось.
Алгоритм на примере моего скрипта про погоду "pogoda.yandex.ru "для простоты понимания.
1. Загружается сайт, юзаем до тех пор пока в адресной строке не появится "pogoda.yandex.ru/chelyabinsk". Это первое назначение скрипта. -- Закрыть IE и себя, если зайдем на означенную страницу.
2.Загружается сайт, юзаем, но вот на страницу "pogoda.yandex.ru/chelyabinsk" так и не зашли , а просто взяли и закрыли браузер. Чтобы скрипт не висел его само собой надо завершить. Это второе назначение. --Завершить свою работу, если закрыли запущенный им экземпляр IE. Так же этот скрипт прекращает свою работу если уйти на любой другой сайт.

Так вот с первой задачей справляется ваш второй вариант, а со второй первый. Нужно их как то подружить.
 
A

Alofa

Гость
OffTopic:
:scratch:
AngryFlay сказал(а):
Нужна проверка (цикл 30 секунд) существования IE окна с URL содержащим нужный текст например "localhost:8080/program".
Если окна с таким вхождением в адресе нет, то завершить скрипт не дожидаясь окончания.
:wacko:
AngryFlay сказал(а):
... Пожалуйста посмотрите как работает этот код.
1. Выберите после загрузки страницы (по кнопке "Другой город") - "Москва".
2. После загрузки страницы просто закройте IE крестиком или любым другим способом.
Скрипт в обоих случаях завершит работу ... Но если будет открыто еще несколько окно браузера, то во втором случае скрипт будет ждать закрытия всех окон IE ...
:stars:
AngryFlay сказал(а):
... дело не совсем коде, а в программе, для которой нужен скрипт. Это я как-нибудь подшаманю. Выяснилось что, с моим же примером про погоду скрипт работает, но не так как хотелось бы...

InnI сказал(а):
Я не пойму. Вам нужно закрыть окно IE, в адресной строке которого присутствует "login"? И после этого завершить скрипт независимо от наличия других окон IE?
:wall_brake:
AngryFlay сказал(а):
Да все верно...
Алгоритм на примере моего скрипта про погоду ...
1. Загружается сайт, юзаем до тех пор пока в адресной строке не появится "pogoda.yandex.ru/chelyabinsk"
...
Так же этот скрипт прекращает свою работу если уйти на любой другой сайт.
:shooting2:


AngryFlay, для начала порядок в своей голове наведите!
А затем понятно, полно и подробно (пошагово) сформулируйте задачу.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
AngryFlay
Проверяйте
Код:
#NoTrayIcon
#include <IE.au3>

; сайт для слежения
$sURL = "pogoda.yandex.ru"
; подстрока в адресе
$sStr = "chelyabinsk"

; создание объекта
For $i = 0 To 4
  $oIE = _IECreate($sURL & "/moscow")
  If IsObj($oIE) Then ExitLoop
  Sleep(1000)
Next
If Not IsObj($oIE) Then Exit MsgBox(0, @ScriptName, "Ошибка создания объекта IE")
;~ _iepropertyset($oie, "addressbar", False)
;~ _iepropertyset($oie, "menubar", False)
$hWnd = HWnd($oIE.hWnd)
If Not $hWnd Then Exit MsgBox(0, @ScriptName, "Ошибка получения дескриптора окна")
While Sleep(3000)
  ; отсутствие окна
  If Not WinExists($hWnd) Then Exit
  $sText = ControlGetText($hWnd, "", "Edit1")
  ; наличие подстроки в адресе
  If StringInStr($sText, $sStr) Then
    WinClose($hWnd)
    Exit
  EndIf
  ; уход с сайта или открытие новой вкладки
  If Not StringInStr($sText, $sURL) Then
    WinClose($hWnd)
    Exit
  EndIf
WEnd
 
Автор
A

AngryFlay

Новичок
Сообщения
17
Репутация
0
для начала порядок в своей голове наведите!
А затем понятно, полно и подробно (пошагово) сформулируйте задачу.

Извините если из-за меня пострадал хоть один заяц. :-\ Я этого не хотел.
Спасибо за оказанное внимание!






Добавлено:
Сообщение автоматически объединено:

InnI сказал(а):
AngryFlay
Проверяйте
Код:
#NoTrayIcon
#include <IE.au3>

; сайт для слежения
$sURL = "pogoda.yandex.ru"
; подстрока в адресе
$sStr = "chelyabinsk"

; создание объекта
For $i = 0 To 4
  $oIE = _IECreate($sURL & "/moscow")
  If IsObj($oIE) Then ExitLoop
  Sleep(1000)
Next
If Not IsObj($oIE) Then Exit MsgBox(0, @ScriptName, "Ошибка создания объекта IE")
;~ _iepropertyset($oie, "addressbar", False)
;~ _iepropertyset($oie, "menubar", False)
$hWnd = HWnd($oIE.hWnd)
If Not $hWnd Then Exit MsgBox(0, @ScriptName, "Ошибка получения дескриптора окна")
While Sleep(3000)
  ; отсутствие окна
  If Not WinExists($hWnd) Then Exit
  $sText = ControlGetText($hWnd, "", "Edit1")
  ; наличие подстроки в адресе
  If StringInStr($sText, $sStr) Then
    WinClose($hWnd)
    Exit
  EndIf
  ; уход с сайта или открытие новой вкладки
  If Not StringInStr($sText, $sURL) Then
    WinClose($hWnd)
    Exit
  EndIf
WEnd


Да теперь все работает так как написано и задумано . Плюс в карму вам.
Но с программой все равно не дружит. Поэтому пришлось взять бубен и родился этот вариант работает безупречно. Но только с это программой.
Код:
While Sleep(3000)
   If WinExists($hWnd) Then
     WinWaitActive($title)
     WinClose($hWnd)
     Exit
   EndIf
   If Not WinExists($hWnd) Then Exit
WEnd

В результате тема решена. Спасибо участникам за помощь. :beer: :beer: :beer:
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Если окно существует, то выход, иначе выход :rofl:
 
Верх