我試圖在反射終端仿真器中運行的遺留應用程序與在IE中運行的基於瀏覽器的應用程序之間實現一些集成。反射終端仿真器 - 與IE集成
我正在使用主機啓動的腳本,以便將維護和部署問題隔離到舊版應用程序。所有腳本都將在舊版應用程序中生成,並使用轉義序列傳輸給Reflection。
我目前能:
- 啓動IE
- 設置選項,如隱藏工具欄
- 導航到一個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對象在腳本調用中保持不變,但它似乎沒有可用於此目的的屬性。 (會話確實有一個的UserData屬性,但是這是一個字符串,而不是一個對象。)
這裏是想我做的一個例子:
腳本1 - 打開IE &保持打開狀態:
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
腳本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
,我無法弄清楚是如何實現在腳本2中使用的FindOriginalIE()函數和3
我嘗試使用GetObject的(部分)取代的CreateObject(),但是這讓我無處。 GetObject()不會打開一個新的IE窗口,或找到一個現有的窗口。我懷疑這是因爲我在Citrix下運行,但我不確定。
我現在唯一的線索是嘗試使用IE的hWND重新連接到原始窗口,或者使用DDE而不是OLE。然而,我沒有太幸運,主要是因爲缺乏文件。
所以,我的問題是:
- 是什麼,我嘗試使用OLE 做可能嗎?也就是說,有沒有辦法 堅持我的句柄跨越 主機發起的腳本調用?
- 我應該期待GetObject()的工作, 還是那個死衚衕?
- 是否可以在主機啓動的腳本中使用Win32 API 到 使用hWND重新連接到IE?
任何指向相關文章,示例代碼或其他見解的鏈接都非常感謝。