Неожиданно остановленный запуск после закрытия окна приложения - PullRequest
1 голос
/ 20 января 2020

Я пишу скрипт vb ниже, чтобы закрыть всплывающее сообщение IE с заголовком «Ошибка».

Set wshShell = CreateObject("WScript.Shell")
wshShell.AppActivate("Error") 
wshShell.SendKeys "{Enter}" 
MsgBox "Closed"

Приведенный выше код может успешно закрыть всплывающее окно, отправив ему клавишу Enter. Однако следующая строка MsgBox «Закрыто» никогда не выполняется. Почему это так? Что мне нужно сделать, чтобы это работало?

Когда я пытался отправить клавишу Tab вместо Enter, MsgBox отображается как задумано. Я подозреваю, что что-то произошло, когда клавиша Enter успешно закрыла окно Error и, таким образом, помешала выполнению последней строки.

После вставки задержки или любой строки кода между sendkey и окном msg, я Я могу получить окно сообщения, чтобы выйти. Тем не менее, я отметил, что тогда я не могу закрыть окно сообщения после ожидания, по крайней мере, 20 секунд. Я заметил, что это происходит только тогда, когда я пытаюсь закрыть окно IE Error. Когда я пытаюсь использовать другой локальный Windows, я могу закрыть MsgBox. Почему это так?

Ответы [ 2 ]

0 голосов
/ 21 января 2020

Нашел ответ на свой вопрос. Таким образом, кажется, что метод AppActivate является виновником. Поскольку сервер не может ответить вовремя, он подвисает сценарий на длительный период времени.

Поэтому вместо закрытия окна с помощью AppActivate и SendKeys лучше всего заменить их на Task Kill:

Set wshShell = CreateObject("WScript.Shell")
wshShell.Run "cmd /c taskkill /fi ""WINDOWTITLE eq Error""", 0, True
MsgBox "Closed"

При этом появляется сообщение MsgBox, и я могу нажать кнопку ОК, чтобы сразу же закрыть его.

0 голосов
/ 20 января 2020

Это потому, что клавиша ENTER сразу закрывает две windows. Вы должны добавить сон на несколько секунд между двумя задачами.

Set wshShell = CreateObject("WScript.Shell") wshShell.AppActivate("Error") 
Wscript.Sleep 4000
wshShell.SendKeys "{ENTER}" 
Wscript.Sleep 2000
MsgBox "Closed"
...