【问题标题】:IE11 Frame Notification Bar Save buttonIE11 框架通知栏保存按钮
【发布时间】:2015-10-07 23:59:53
【问题描述】:

在带有 MS Excel 2010 和 IE11 的 64 位系统上,我使用此代码自动从网站下载过程:

hWnd = FindWindowEx(IE.hWnd, 0, "Frame Notification Bar", vbNullString)

If hWnd Then
    hWnd = FindWindowEx(hWnd, 0&, "Button", "Save")
End If

If hWnd Then
    SetForegroundWindow (hWnd)
    Sleep 600
    SendMessage hWnd, BM_CLICK, 0, 0
End If

在框架通知栏出现之前一切正常。我正在获取此窗口的 HWND,但无法获取“保存”按钮的 HWND,因此我可以发送点击。

【问题讨论】:

  • 俗气的答案是使用 sendkeys 发送 Alt+S 到下载确认,但真正的答案是实现 urlddownloadtofile 或使用 xmlhttp 捕获流并保存。
  • 我不想使用发送密钥,因为它们有时似乎可以工作。而且我不想展示整个过程和可见性的转变。

标签: excel vba internet-explorer automation


【解决方案1】:

如果有人还在寻找解决方案,IE11 就在这里。

在上面Vahagn Sargsyan 代码的第一行,而不是"Frame Notification Bar",得到对话框的确切标题,可能是英文"View Downloads - Internet Explorer"。这使您可以抓住正确的 hWnd。

因为在 IE11 中没有更多的按钮加速器来保存文件,请按照 pmr 发布的解决方案 here

从 pmr 代码中,只需获取以下几行:

Set e = o.ElementFromHandle(ByVal h)
Dim iCnd As IUIAutomationCondition
Set iCnd = o.CreatePropertyCondition(UIA_NamePropertyId, "Save")

Dim Button As IUIAutomationElement
Set Button = e.FindFirst(TreeScope_Subtree, iCnd)
Dim InvokePattern As IUIAutomationInvokePattern
Set InvokePattern = Button.GetCurrentPattern(UIA_InvokePatternId)
InvokePattern.Invoke

这应该可以解决您的问题。这为我打开了法语本地化的局面。

【讨论】:

  • 嗨 Jerome,我尝试更改要查找的文本,但 Hwnd 始终返回 0,因此它正在退出 Sub。但我确定我使用了正确的词
【解决方案2】:

我假设您说的是 IE 底部弹出的那个小框架,为您提供打开、保存或取消选项。如果是这样,您可能想查看here 提出的类似问题的另一个答案。

第二个解决方案将是一个更复杂的解决方案 (here),但仍然有效。您必须从本论坛提供的工作簿中导入模块(尽管您需要注册会员资格,但它是免费的,所以就这样做吧。)这基本上可以满足您的需求,尽管方式是允许您更大的灵活性(选择文件路径、文件名等),也更复杂一些。

无论如何,希望我能帮上忙。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多