Автор Тема: Окно перехватывает управление у скрипта AutoIT  (Прочитано 819 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Эта тема содержит сообщение, помеченное как лучший ответ. Кликните здесь для перехода к этому сообщению.

Оффлайн Boris [?]

  • Новичок
  • *
  • Сообщений: 23
  • Репутация: 0
  • Пол: Мужской
  • Дорогу осилит идущий
    • Награды
  • Версия AutoIt: 3.3.14.0
Доброе время суток уважаемые форумчане,

В программе на JavaScript в IE11 Windows7 во внутренней сети организации нажимается пункт меню "Выход". Появляется запрос - см.прикрепленный файл
После этого скрипт пытается нажать на ОК:
Код: AutoIt [Выделить]
$n=WinActivate('Сообщение')
ControlClick($n,'','[CLASS:Button;INSTANCE:1]')

и ничего не происходит. Пробовал вместо ControlClick высылать ENTER и другие команды - окно с сообщением игнорирует все команды AutoIT. Получается что окно перехватывает управление у скрипта. Скрипт ждет закрытия окна. Если нажать ОК вручную - скрипт продолжает работу.
Если после появления окна запустить еще один скрипт
Код: AutoIt [Выделить]
$n=WinActivate('Сообщение')
ControlClick($n,'','[CLASS:Button;INSTANCE:1]')

окно реагирует и ОК нажимается, но если сначала нажать пункт меню "Выход" то с появлением окна "Сообщение" скрипт теряет управление. Что это может быть? Прошу помочь очень нужно. Заранее благодарю за любые сообщения.


Внимание: Для просмотра прикреплённых файлов необходимо Войти или Зарегистрироваться
« Последнее редактирование: Сентябрь 30, 2017, 08:51:49 от Boris »
Сегодня подходящий день чтобы действовать

Русское сообщество AutoIt

Окно перехватывает управление у скрипта AutoIT
« Отправлен: Сентябрь 30, 2017, 08:36:12 »

Оффлайн Tempo [?]

  • Осваивающий
  • **
  • Сообщений: 106
  • Репутация: 25
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Окно перехватывает управление у скрипта AutoIT
« Ответ #1, Отправлен: Сентябрь 30, 2017, 10:34:28 »
Пробовал вместо ControlClick высылать ENTER и другие команды - окно с сообщением игнорирует все команды AutoIT.

Сперва попробуйте проверить возвращает ли WinActivate дескриптор окна

Код: AutoIt [Выделить]
$hWnd = WinActivate("Сообщение c веб-страницы")
If Not $hWnd Then Exit MsgBox(4096, "Сообщение", "Окно не найдено, завершаем работу скрипта")


Если нет попробуйте ожидать сообщение в нужном вам месте

Код: AutoIt [Выделить]
« Последнее редактирование: Сентябрь 30, 2017, 15:08:54 от Tempo »

Оффлайн Boris [?]

  • Новичок
  • *
  • Сообщений: 23

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
  • Дорогу осилит идущий
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Окно перехватывает управление у скрипта AutoIT
« Ответ #2, Отправлен: Сентябрь 30, 2017, 14:00:22 »
Сперва попробуйте проверить возвращает ли WinActivate дескриптор окна
Код: AutoIt [Выделить]
$hWnd = WinActivate("Сообщение c веб-страницы")
If Not $hWnd Then Exit MsgBox(4096, "Сообщение", "Окно не найдено, завершаем работу скрипта")

Если нет попробуйте ожидать окно в нужном вам месте
Код: AutoIt [Выделить]
[/quote]

Наверное не совсем меня поняли:
Нажимается в верхнем меню "Выход" и появляется запрос в виде Windусового запроса "Выйти из приложения?". Так вот проблема в том что СКРИПТ AutoIt не работает дальше - что WinWait что WinWaitActive что ControlClick без разницы они - НЕ РАБОТАЮТ потому что скрипт до них не доходит - он ждет завершения окна с запросом "Выйти из приложения". Понимаете? Нечего просто ждать после появления окна "Выйти из приложения?" - скрипт останавливает свою работу и ждет закрытия этого окна.

Предполагаю что проблема в перехвате управления JavaScript и что решение где то  в районе передачи управления, фокуса и т.д. Прошу если знаете ответ - подскажите буду благодарен.

Оффлайн Tempo [?]

  • Осваивающий
  • **
  • Сообщений: 106
  • Репутация: 25
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Окно перехватывает управление у скрипта AutoIT
« Ответ #3, Отправлен: Сентябрь 30, 2017, 14:20:43 »
Пробовал вместо ControlClick высылать ENTER и другие команды - окно с сообщением игнорирует все команды AutoIT.

потому что скрипт до них не доходит - он ждет завершения окна с запросом "Выйти из приложения"

Кому вы их высылали если даже не знаете вернул ли WinActive дескриптор окна сообщения? Может поэтому окно сообщения не закрывается и скрипт ждет пока оно закроется?

Нужен весь код
« Последнее редактирование: Сентябрь 30, 2017, 15:20:16 от Tempo »

Русское сообщество AutoIt

Re: Окно перехватывает управление у скрипта AutoIT
« Ответ #3 Отправлен: Сентябрь 30, 2017, 14:20:43 »

Помечен как лучший ответ пользователем Boris Отправлен Октябрь 01, 2017, 19:38:30

Оффлайн Garrett [?]

  • Глобальный модератор
  • *
  • Сообщений: 3989
  • Репутация: 960
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Окно перехватывает управление у скрипта AutoIT
« Ответ #4, Отправлен: Сентябрь 30, 2017, 17:55:11 »
Boris  [?]
Цитировать
В программе на JavaScript в IE11
*click*

Скорблю и помню.




Оффлайн Boris [?]

  • Новичок
  • *
  • Сообщений: 23

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
  • Дорогу осилит идущий
    • Награды
  • Версия AutoIt: 3.3.14.0
Пробовал вместо ControlClick высылать ENTER и другие команды - окно с сообщением игнорирует все команды AutoIT.

потому что скрипт до них не доходит - он ждет завершения окна с запросом "Выйти из приложения"

Кому вы их высылали если даже не знаете вернул ли WinActive дескриптор окна сообщения? Может поэтому окно сообщения не закрывается и скрипт ждет пока оно закроется?

Нужен весь код
Вы меня в тупик ставите своими вопросами. Давайте так для эксперимента я упростил код донельзя убрал ВСЕ команды кроме двух.
Запускаю JS программу с кнопкой Выход и включаю этот код:
1. Клик на кнопку Выход - появилось окно запроса.
2. MsgBox(0,'','Проверка').
Код: AutoIt [Выделить]
$oIE=_IEAttach('title окна')
$oObj=_IEGetObjById($oIE,'id кнопки Выход')
_IEAction($oObj,"focus")
_IEAction($oObj,"click")
;здесь появляется окно запроса
MsgBox(0,'','Проверка')


Как вы понимаете MsgBox в любом случае должен выйти на экран есть окно, нет окна - но этого не происходит. Также с любыми другими командами.
Если вручную закрыть окно - MsgBox сразу же появляется.
Скрипт просто не может пройти мимо окна, что то мешает ему, перехватывает управление. Скорее всего это связано с JS. Других причин я не вижу. Надеюсь я понятно изложил - если что извините не писатель


Добавлено: Октябрь 01, 2017, 19:40:58
Boris  [?]
Цитировать
В программе на JavaScript в IE11
*click*
Спасибо большущее. Оказывается это распространенная проблема. Кажется что то нащупал здесь http://autoit-script.ru/index.php?topic=7339.0 Попробую сваять свой код - отпишусь о результатах


Добавлено: Октябрь 02, 2017, 12:41:28
Доброго Вам времени суток уважаемые коллеги,

Решил я проблемку с подачи Garret - ему отдельное спасибо :). Как я и предполагал окно запроса блокирует работу скрипта. Обойти эту блокировку скрипт сам не может - окно не дает. Решение я нашел здесь http://autoit-script.ru/index.php?topic=7339.0. Если убрать шелуху - суть проста перед появлением окна запустить другой скрипт который и закроет окно.
Вот для примера простейшая реализация такого скрипта, назовем его WinKiller.au3:
Код: AutoIt [Выделить]
$hD=WinWait('Сообщение')
WinActivate($hD)
ControlClick($hD,'','[CLASS:Button;INSTANCE:1]')

В основном скрипе до нажатия кнопки Выход (например) запускаем на выполнение WinKiller.
Код: AutoIt [Выделить]
Run(@AutoItExe&' Путь к WinKiller.au3')
$oIE=_IEAttach('title окна')
$oObj=_IEGetObjById($oIE,'ID кнопка Выход')
_IEAction($oObj,"focus")
_IEAction($oObj,"click")
;здесь появляется окно запроса, WinKiller срабатывает и окно закрывается, что и требовалось
; дальнейший код скрипта
 

Все работает. Конечно это простейший код, тут можно код WinKiller записать во временный файл, который выполнить и потом удалить. Но суть я думаю понятна.
« Последнее редактирование: Октябрь 02, 2017, 12:41:28 от Boris, Причина: Объединение сообщений »

Русское сообщество AutoIt

Re: Окно перехватывает управление у скрипта AutoIT
« Ответ #5 Отправлен: Октябрь 01, 2017, 19:14:59 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
7 Ответов
5396 Просмотров
Последний ответ Январь 27, 2013, 07:16:04
от taks
0 Ответов
1052 Просмотров
Последний ответ Октябрь 15, 2013, 08:51:41
от madmasles
9 Ответов
1663 Просмотров
Последний ответ Июнь 21, 2014, 15:31:55
от Z_Lenar
5 Ответов
1018 Просмотров
Последний ответ Август 15, 2014, 02:31:01
от Garrett
5 Ответов
1359 Просмотров
Последний ответ Ноябрь 01, 2014, 15:37:24
от fortages
1 Ответов
978 Просмотров
Последний ответ Декабрь 16, 2014, 03:11:56
от Yashied
0 Ответов
586 Просмотров
Последний ответ Декабрь 16, 2014, 06:17:47
от madmasles
0 Ответов
1104 Просмотров
Последний ответ Октябрь 26, 2015, 16:32:53
от Masha
3 Ответов
1102 Просмотров
Последний ответ Ноябрь 26, 2015, 12:48:54
от ra4o
3 Ответов
886 Просмотров
Последний ответ Декабрь 06, 2015, 15:57:03
от InnI