Работа с Internet Explorer (Программное сохранение файла) - VB

Узнай цену своей работы

Формулировка задачи:

Коллеги, добрый день!
Прошу помочь мне с такой проблемой:
Делаю программку на VBA, которая лезет по ссылке на определенный сайт, "бегает" там по кнопочкам и в итоге нажимает на кнопку "сохранить файл". После этого внизу окна Интернет Эксплорера высвечивается дополнительное окно с кнопками Open, Save, Cancel (скрин прилагаю). И вот уже обратиться к этому окну у меня не получается. На диалоговое окно это не очень похоже.
Файл, который я хочу скачать, динамически обновляется на этом ресурсе каждый день, и постоянной прямой ссылки не имеет.
При помощи сканера окон удалось выявить только его класс -

DirectUIHWND

.
Подскажите, пожалуйста, есть ли какие-то способы работы с этим окном через VBA ?

Решение задачи: «Работа с Internet Explorer (Программное сохранение файла)»

textual
Листинг программы
Option Explicit
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWndParent As Long, ByVal hwndChildAfter As Long, ByVal lpszClass As String, ByVal lpszWindow As String) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare 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 wFlag As Long) As Long

Const VK_RETURN = &HD 'Enter
Const VK_CONTROL = &H11 'Ctrl (любая)
Const VK_RIGHT = &H27 'Стрелка вправо
Const VK_DOWN = &H28 'Стрелка вниз
Const VK_J = &H4A 'кнопка J
Const WM_KEYDOWN As Long = &H100
Const WM_SETFOCUS = &H7

Public WithEvents objIE As SHDocVw.InternetExplorer
Public objNewIE As Object


Private Sub CommandButton1_Click()
Dim Link As String
Dim WinWnd, WinWnd1, WinWnd2
Dim retValue As Long

...
Set objIE = New InternetExplorer
Link = "https://ссылка на страницу сайта с полями логин и пароль.aspx"
objIE.Navigate Link
objIE.Visible = False 'делаем IE невидимым
While objIE.Busy Or objIE.ReadyState <> 4
    DoEvents
Wend
WinWnd = FindWindow(vbNullString, "заголовок окна") 'определение хэндла окна
...
ввод логина, пароля и вход на сайт
...
нажатие на иконку "выгрузить отчет в формате xlsx"
...
While objIE.Busy
    DoEvents
Wend
    
'открытие окна загрузок IE путем нажатия клавиш Ctrl+J
Call PostMessage(WinWnd, WM_KEYDOWN, VK_CONTROL, 0)
Call PostMessage(WinWnd, WM_KEYDOWN, VK_J, 0)

'определение хэндла окна загрузок и хэндла его дочернего окна
WinWnd1 = FindWindow(vbNullString, "View Downloads - Windows Internet Explorer")
retValue = SetWindowPos(WinWnd1, -1, 0, 0, 0, 0, 2)
WinWnd2 = FindWindowEx(WinWnd1, 0, "DirectUIHWND", vbNullString)
retValue = SetWindowPos(WinWnd2, -1, 0, 0, 0, 0, 2)

'посылаем нажатие клавиш окну загрузок
Call PostMessage(WinWnd1, WM_SETFOCUS, 0, 0)
Call PostMessage(WinWnd2, WM_SETFOCUS, 0, 0)
Call PostMessage(WinWnd1, WM_KEYDOWN, VK_RIGHT, 0) 'направо (после этой строки окно активируется. скорее всего тут можно послать любой WM_KEYDOWN)
Call PostMessage(WinWnd2, WM_KEYDOWN, VK_RIGHT, 0) 'направо (переход с кнопки Open на кнопку Save)
Call PostMessage(WinWnd2, WM_KEYDOWN, VK_RIGHT, 0) 'направо (переход с Save на раскрывающийся список)
Call PostMessage(WinWnd2, WM_KEYDOWN, VK_DOWN, 0) 'вниз (открываем раскрывающийся список)
Call PostMessage(WinWnd2, WM_KEYDOWN, VK_DOWN, 0) 'вниз (переходим в раскрывающемся списке на кнопку SaveAs)
Application.Wait DateAdd("s", 1.5, Now) 'таймер на 1.5 сек. Без него почему-то корректно не срабатывает нажатие на Enter в следующей строке
Call PostMessage(WinWnd2, WM_KEYDOWN, VK_RETURN, 0)    'нажатие на Enter (активация кнопки Save As).
                                                       'После этого открывается диалоговое окно с выбором каталога сохранения файла.
        
...
    
End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.818 из 5
Похожие ответы