Я пытаюсь реализовать некоторую интеграцию между устаревшим приложением, работающим в эмуляторе терминалов Reflection, и браузером, работающим в IE.Reflection Terminal Emulator - интеграция с IE
Я использую сценарии, инициированные инициатором хоста, чтобы проблемы с обслуживанием и развертыванием были изолированы от устаревшего приложения. Все сценарии будут сгенерированы в устаревшем приложении и переданы в Reflection с помощью escape-последовательностей.
Я в настоящее время в состоянии:
- Запуск IE
- опции Set, такие как скрытие панелей инструментов
- Перейдите к URL
- Информация о состоянии передачи обратно в наследство приложение
- Подождите, пока «закрытый» сигнал от устаревшего приложения
- Закрыть IE
Вот VBA код, чтобы сделать это:
Sub Main
Dim CR as String
CR = CHR$(rcCR)
Dim objIE as Object
Set objIE = CreateObject("InternetExplorer.Application")
objIE.ToolBar = false
objIE.Navigate("http://www.google.com/")
objIE.Visible = true
Session.Transmit "OK" & CR
Session.WaitForString "CLOSE", 0, rcAllowKeystrokes
objIE.Quit
End Sub
Проблема с этим состоит в том, что скрипт продолжает работать до тех пор, пока не получит команду на от унаследованного приложения.
Что я хочу сделать, это использовать один скрипт для запуска браузера, а другой - закрыть его или повторно использовать для другого URL-адреса. Тем не менее, я не смог найти способ сохранить мою ссылку на IE через вызовы скриптов. Объявление objIE как глобального внешнего Sub Main не помогло. Объект Session сохраняется в сценариях, но у него нет свойства, которое я могу использовать для этой цели. (Session имеет свойство UserData, но это строка, а не объект.)
Вот пример того, что я хотел бы сделать:
Сценарий 1 - Открыть IE & Оставьте Open:
Sub Main
Dim CR as String
CR = CHR$(rcCR)
Dim objIE as Object
Set objIE = CreateObject("InternetExplorer.Application")
objIE.ToolBar = false
objIE.Navigate("http://www.google.com/")
objIE.Visible = true
Session.Transmit "OK" & CR
End Sub
Сценарий 2 - Отправить исходное окно IE на новый URL
Sub Main
Dim CR as String
CR = CHR$(rcCR)
Dim objIE as Object
Set objIE = FindOriginalIE()
objIE.Navigate("http://www.stackoverflow.com/")
Session.Transmit "OK" & CR
End Sub
Script 3 - Закрыть IE
Sub Main
Dim CR as String
CR = CHR$(rcCR)
Dim objIE as Object
Set objIE = FindOriginalIE()
objIE.Quit
Session.Transmit "OK" & CR
End Sub
Та часть, я не могу понять, как реализовать функцию FindOriginalIE() используется в скриптах 2 и 3.
Я попытался с помощью GetObject() вместо CreateObject(), но у меня нет нигде. GetObject() не откроет новое окно IE или не найдет существующий. Я подозреваю, что это потому, что я бегу под Citrix, но я не уверен.
Мое единственное направление сейчас - попытаться использовать hWND IE для повторного подключения к исходному окну или использовать DDE вместо OLE. Мне не повезло ни с одним из них, в основном из-за отсутствия документации.
Итак, мои вопросы:
- Это то, что я пытаюсь сделать возможным с помощью OLE?То есть, есть способ , чтобы сохранить мой дескриптор IE через инициированные вызовом скрипта?
- Должен ли я ожидать, что GetObject() будет работать, или это тупик?
- Возможно ли использовать Win32 API в инициированном хостом сценарии до повторно подключиться к IE с помощью hWND?
Приветствуются любые ссылки на похожие статьи, примеры кода или другие идеи.