Я пытаюсь автоматизировать формы / страницы JavaScript в IE7 с помощью VBA. Я уже определил , что должен использовать sendkeys, чтобы пройти мимо всплывающего окна с предупреждением JS.Поскольку запуск этого процесса займет некоторое время, цель этой функции - дать пользователям возможность запускать процесс в фоновом режиме и выполнять другие действия.Это не мой предпочтительный вариант при работе с sendkeys, но я не знаю, что у меня есть другой выбор (кроме принуждения пользователей ждать завершения процесса, который я могу использовать в качестве крайней меры).
Чтобы избежать проблем с отправкой ключей в неправильное приложение, я перенесу фокус на текущее окно IE.При этом фокус фокусируется на главном окне IE, а не на окне предупреждения.Если я пытаюсь сбросить фокус, приостановив коды, а затем вручную нажимая на окно IE, фокус переходит в окно предупреждения.Другими словами, кажется, что установка фокуса с помощью кода является виновником.
Мне не удалось найти способ перехватить окно оповещения с помощью моей автоматизации, иначе я бы попытался активировать элемент управления кнопкой на нем.
Я устанавливаю фокус с помощью этого кода:
Private Declare Function SetForegroundWindow Lib "user32" (ByVal HWND As Long) As Long
Sub WaitForIE(myIEWindow As InternetExplorer, HWND As Long, Optional CheckForAlert As Boolean = False)
'OTHER CODE
While myIEWindow.Busy
DoEvents ' Wait until IE is done loading page and/or user actions are done.
Application.Wait DateAdd("s", 1, Now()) ' Wait one second per cycle so as not to use too much CPU
If CheckForAlert Then 'Only check for alert box when certain pages are loaded
Dim IEPage As Variant
Dim PlaceHolder As Long
Dim SearchFor As String
SearchFor = "userMessage = '"
Set IEPage = myIEWindow.Document.Frames(2).Document.Body
PlaceHolder = InStr(IEPage.innerhtml, SearchFor)
If PlaceHolder > 0 Then
If InStr(PlaceHolder + Len(SearchFor), IEPage.innerhtml, "'") > PlaceHolder + Len(SearchFor) + 1 Then ' if userMessage does not equal '' then the alert will show, so clear alert box
SetForegroundWindow HWND 'HWND is the HWND of the myIEWindow
Application.SendKeys "{ENTER}", True
End If
End If
Set IEPage = Nothing
End If
Wend
' MORE CODE
End Sub
Есть ли альтернатива этому методу (настройка фокуса) или есть еще один шаг к этому методу, которого мне не хватает?