代码之家  ›  专栏  ›  技术社区  ›  Clayton

反射终端仿真器-与IE集成

  •  1
  • Clayton  · 技术社区  · 16 年前

    我正在尝试在反射终端模拟器中运行的传统应用程序和IE中运行的基于浏览器的应用程序之间实现某种集成。

    我正在使用主机启动的脚本,以便将维护和部署问题隔离到遗留应用程序。所有脚本都将在遗留应用程序中生成,并使用转义序列传输到Reflection。

    我目前能够:

    1. 发布IE
    2. 导航到URL
    3. 将状态信息传输回旧版应用程序
    4. 接近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
    

    我尝试使用GetObject()而不是CreateObject(),但这毫无用处。GetObject()不会打开新的IE窗口,也不会找到现有的IE窗口。我怀疑这是因为我在Citrix下运行,但我不确定。

    因此,我的问题是:

    1. 使用OLE?就是有办法吗?
    2. 我应该期望GetObject()工作吗,
    3. 可以使用Win32 API吗 在主机启动的脚本中 使用hWND重新连接到IE?

    非常感谢您提供相关文章、示例代码或其他见解的链接。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Oorang    15 年前

    InternetExplorer对象不支持AFAIK GetObject。然而,这并不是目的:)在 many other ways 您可以将其从shell32的windows集合中拉出。对于示例代码(改编自上面链接中的代码),您需要设置以下参考:

    1. 微软HTML对象库
    2. MicrosoftShell控件和自动化

    Public Sub RunMeFirst()
        Dim objIE As SHDocVw.InternetExplorer
        Set objIE = New SHDocVw.InternetExplorer
        objIE.Visible = True
        objIE.navigate "http://www.google.com/"
        Do Until objIE.readyState = READYSTATE_COMPLETE
            DoEvents
        Loop
    End Sub

    Dim objIE作为SHDocVw.InternetExplorer Dim doc作为MSHTML.HTMLDocument Set objIE=GetIEByURL(“ http://www.google.com/ ") Set doc=objIE.document 端接头

    私有函数GetIEByURL(ByVal URL作为字符串)作为SHDocVw.InternetExplorer 模糊的对象外壳如外壳32.外壳 Dim objExplorer作为Shell32.ShellFolderView Set objShell=newshell 如果obj的类型为SHDocVw.InternetExplorer,则 如果StrComp(obj.LocationURL、URL、vbTextCompare)=0&然后 退出 如果结束 下一个obj 设置GetIEByURL=obj

    但我认为,也许值得讨论一下你正在努力实现的目标。机器人化IE是一种相当笨拙的方法(我经常对此感到内疚),但可能有一种更好、资源密集度更低的方法。