Закрытие панели уведомлений в IE11 с использованием VBA - PullRequest
0 голосов
/ 08 октября 2018

Я использую VBA для автоматизации некоторых операций на сайте.Более того, мой браузер IE11.

Я знаю, что если я хочу нажать «Сохранить» на панели уведомлений кадра, я могу использовать следующий фрагмент кода:

Dim o as IUIAutomation
Set o = New CUIAutomation
Dim h as Long
h = ie.hwnd
Dim ie as InternetExplorer 
ie = CreateObject("InternetExplorer.Application")
h = FindWindowEx(h, 0, "Frame Notification Bar", vbNullString)
Dim e as IUIAutomationElement
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

Аналогично, если яхочу нажать кнопку «Открыть». Я могу заменить слово «Сохранить» в приведенном выше коде словом «Открыть».

М проблема в том, что после нажатия кнопки «Сохранить» у меня есть еще 3 варианта, чтобы нажать: «Открыть», «Открыть папку», «Просмотр загрузок».Я также могу закрыть панель уведомлений кадра, нажав кнопку в правом углу панели уведомлений кадра.Это видно ниже:

enter image description here

Мой вопрос: как я могу нажать эту кнопку, используя VBA?

1 Ответ

0 голосов
/ 30 ноября 2018

Итак, я заставил это работать, используя следующее.

Поместите следующее в верхнюю часть модуля как обычно

Private Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Public Const WM_DESTROY = &H2
Public Const WM_CLOSE = &H10

Поместите это после InvokePattern.Invoke, я поставил значение времени там, чтобы быть безопасным, может не понадобиться.

  Application.Wait Now + TimeValue("00:00:05")
  SendMessage h, WM_CLOSE, 0, 0
...