【问题标题】:vbscript - Bring Internet Explorer Application window to frontvbscript - 将 Internet Explorer 应用程序窗口置于前面
【发布时间】:2017-04-28 20:54:12
【问题描述】:

我有一个脚本,通过CreateObject("InternetExplorer.Application") 创建一个 IE 窗口。问题是,每当我运行这个脚本时,它总是在我的机器上可能已经打开的任何其他东西后面打开。我希望这个 IE 窗口在其他所有内容的顶部打开。它不必像任务管理器中的选项那样“始终在顶部”,但它至少应该最初在顶部打开。在那之后,我不在乎会发生什么。我一直在寻找高低,但无法找到实现这一目标的方法。我尝试过appactivatefocus(),但它们似乎都不起作用。有什么建议吗?

我正在运行带有 IE 11 的 Windows 7

【问题讨论】:

  • 程序启动时有两秒时间设置前台窗口。
  • AppActivate之后你在用什么?如果您使用的是 "Internet Explorer" 或等效的,那可能是您的问题。我通常必须在AppActivate 之后加上标题(例如来自:IE.Document.Title 的值)。
  • 或者你可以使用IE.Visible = True
  • @Noodles 你有那个来源吗?第一次听说这么精确。

标签: vbscript windows-7 internet-explorer-11


【解决方案1】:

您可以使用 SetWindowPos API 函数通过其窗口句柄将您想要的任何窗口带到前面。 InternetExplorer 对象已经有一个属性来调用句柄(.Application.hwnd):

Public Declare PtrSafe Function SetWindowPos Lib "user32" (ByVal hwnd As Long, _
  ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, _
  ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2

Sub Test()
    Set ie = CreateObject("internetexplorer.application")
    ie.Visible = True
    SetWindowPos ie.hwnd, 0, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE

    
End Sub

【讨论】:

    【解决方案2】:

    我发现顺序会影响行为。在 IE 完成加载之前不要让 IE 可见。

    Set ie = CreateObject("InternetExplorer.Application")
    ie.Navigate "http://www.google.com"
    While ie.Busy Or ie.ReadyState <> READYSTATE_COMPLETE
        DoEvents
    Wend
    ie.visible = True 
    DoEvents
    

    【讨论】:

    • 我知道这是旧的,但这是避免问题的快速简便的方法。
    【解决方案3】:

    我在网上找了一堆解决方案,但最终找到了最简单的一个。

    Set objExplorer = CreateObject ("InternetExplorer.Application")
    objExplorer.document.focus()
    

    【讨论】:

    • 这会导致错误:编译错误:语法错误
    • 不适合我戴夫。您使用的是哪个编译器?我正在使用 WScript。
    【解决方案4】:

    您可能有问题,因为 IE 窗口的标题不完全是页面的标题(即“Yahoo - Internet Explorer”) 因此,您必须在开始导航到该页面之前将其置于最前面:

    Set ie = CreateObject("InternetExplorer.Application")
    ie.Visible = True
    CreateObject("WScript.Shell").AppActivate "Internet Explorer"
    ie.Navigate "http://www.yahoo.com/"
    

    【讨论】:

    • 很有趣,我以为我已经尝试了很多,但以前没有用。我认为我没有将 CreateObject("WScript.Shell") 与 appactivate 一起使用,所以可能就是这样。要么是那个,要么是@Noodles 对设置前景窗口的时间限制的评论。我在那里睡了一觉,可能把事情搞砸了。谢谢!
    • IE 不需要是前台窗口才能被脚本控制。它会在不可见的情况下愉快地工作。
    • @Noodles,是的,我知道这一点,但我的应用程序的 IE 窗口的全部意义在于创建一个用户界面来收集变量输入以传递给另一个应用程序。我不希望我的脚本的用户必须尝试找到创建我的 GUI 的 IE 窗口,我希望在执行我的脚本时立即将 GUI 呈现给他们。再次感谢您提供有关设置前景窗口的时间限制的见解!
    猜你喜欢
    • 1970-01-01
    • 2010-11-01
    • 2011-07-14
    • 2015-06-02
    • 1970-01-01
    • 2011-11-04
    • 2012-10-08
    • 2011-10-07
    • 1970-01-01
    相关资源
    最近更新 更多