VBA IE浏览器自动化 - 下载文件时如何选择"Open"



这是我在stackoverflow上的第一个问题!

我一直在寻找这个问题的解决方案,但没有找到任何帮助。我可能只是在搜索中使用了错误的关键字,但到目前为止,我没有运气。问题来了:

在VBA中,如何从Internet Explorer的文件下载对话框中选择"打开"选项?

为了进一步澄清,我说的是下载文件时在IE9屏幕底部弹出的黄橙色条。

我正在做一些VBA自动化,使用Internet Explorer从网上下载数百个PDF,但是有一个中间步骤,在我获得实际的PDF之前,必须打开.fdf文件。所以我首先需要选择"打开"选项,以便我可以继续下一步自动化。就像我之前说的,我已经做了很多搜索,到目前为止还没有运气。

我尝试使用SendKeys,希望按 Enter 会起作用,这是最后一次尝试,但没有奏效。

提前感谢您的帮助!

我在这里广泛地介绍了这一点。

主题VBA/VB.Net/VB6–单击IE下载窗口上的打开/保存/取消按钮–第一部分

链接: http://www.siddharthrout.com/2011/10/23/vbavb-netvb6click-opensavecancel-button-on-ie-download-window/

<小时 />

编辑 (IMP( 如果您使用的是 IE 9,请不要忘记阅读第 2 部分,因为它包含并涵盖了 IE 9 下载窗口的窗口结构

<小时 />

主题VBA/VB.Net/VB6–单击IE下载窗口上的打开/保存/取消按钮–第二部分

链接: http://www.siddharthrout.com/2012/02/02/vbavb-netvb6click-opensavecancel-button-on-ie-download-window-part-ii/

上面的链接讨论了如何使用 API 来实现您想要的。

从第一个链接...

像你和我一样,我们都有名字,类似的窗口有"句柄"(hWnd(,类等。一旦你知道那个hWnd是什么,就更容易与该窗口进行交互。

在这种情况下,Findwindow API 通过使用类名和窗口的标题("文件下载"(来查找特定窗口的 hWnd。"打开","保存"和"取消"按钮本身是窗口,但它们是"文件下载"主窗口的子窗口。这意味着每个也将有一个hWnd:)要查找子窗口,我们不使用 FindWindow,而是使用 FindWindowEx。所有三个按钮"打开","保存"和"取消"都具有相同的类,即"按钮"。

类似文章: 链接

    Option Explicit
    Dim ie As InternetExplorer
    Dim h As LongPtr
    Private Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As LongPtr, ByVal hWnd2 As LongPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As LongPtr
Sub Download()
    Dim o As IUIAutomation
    Dim e As IUIAutomationElement
    Set o = New CUIAutomation
    h = ie.Hwnd
    h = FindWindowEx(h, 0, "Frame Notification Bar", vbNullString)
    If h = 0 Then Exit Sub
    Set e = o.ElementFromHandle(ByVal h)
    Dim iCnd As IUIAutomationCondition
    Set iCnd = o.CreatePropertyCondition(UIA_NamePropertyId, "Open")
    Dim Button As IUIAutomationElement
    Set Button = e.FindFirst(TreeScope_Subtree, iCnd)
    Dim InvokePattern As IUIAutomationInvokePattern
    Set InvokePattern = Button.GetCurrentPattern(UIA_InvokePatternId)
    InvokePattern.Invoke
End Sub 

我将快捷键发送到应用程序。这里是 IE11 的。抱歉,我无法在IE9中进行测试。如果按住 Alt,它可能会像 IE11 一样向您显示组合的另一个键。

注意:如果IE不是计算机上的活动窗口,则代码将无法按预期运行,因此在调试模式下它将无法工作。

  • 快捷键:Alt+O
  • VBA: Application.SendKeys "%{O}"

相关内容

最新更新