Как сделать Internet Explorer открытым Invisible в VB6?

90
13

Выполнение:


Shell ("C:\Program Files\Internet Explorer\iexplore.exe -embedding http://www.websiteurl.com")


Не работает, как мне это нужно, поскольку я, по сути, нуждаюсь в нем, чтобы иметь возможность перенаправлять и запрашивать пользователя для загрузки файла. Любые идеи?

спросил(а) 2021-01-25T18:13:38+03:00 4 месяца, 2 недели назад
1
Решение
108

Internet Explorer предоставляет доступный интерфейс COM, который вы можете использовать. Если вам действительно нужно. Я бы рекомендовал против этого - его сравнительно медленный, подверженный ошибкам, громоздкий и ресурсоемкий.


Что более удобно для решения вашей проблемы, используется WinHTTPRequest. В своем проекте ссылайтесь на "Службы Microsoft WinHTTP, версия 5.1", а затем продолжайте:

Dim HttpRequest As New WinHttp.WinHttpRequest
Dim TargetUrl As String
Dim TargetFile As String
Dim FileNum As Integer

TargetFile = "C:\foo.doc"

TargetUrl = "http://www.websiteurl.com"
HttpRequest.Open Method:="GET", Url:=TargetUrl, Async:=False
HttpRequest.Send

If HttpRequest.Status = 302 Then

TargetUrl = HttpRequest.GetResponseHeader("Location")
HttpRequest.Open Method:="GET", Url:=TargetUrl, Async:=False
HttpRequest.Send

If HttpRequest.Status = "200" Then

FileNum = FreeFile
Open TargetFile For Binary As #FileNum
Put #FileNum, 1, HttpRequest.ResponseBody
Close FileNum

Debug.Print "Successfully witten " & TargetFile
Else
Debug.Print "Download failed. Received HTTP status: " & HttpRequest.Status
End If
Else
Debug.Print "Expected Redirect. Received HTTP status: " & HttpRequest.Status
End If


Жесткое кодирование "C:\foo.doc", конечно, не имеет большого смысла. Я бы использовал имя файла, которое сервер предоставляет в заголовках ответов ("Content-Type" или "Content-Disposition", в зависимости от того, что вы ожидаете).

ответил(а) 2021-01-25T18:13:38+03:00 4 месяца, 2 недели назад
63

Есть несколько вещей, которые вы могли бы сделать.

    Используйте внешнюю программу, например wget, чтобы получить файл вместо IE. Вы можете получить wget бесплатно в http://www.cygwin.com с помощью инструментов cygnus. Это GPL, так что следите за тем, есть ли у вас коммерческий продукт.


    Напишите небольшую .NET-программу, которая использует класс HttpWebRequest для получения файла и оболочки для этой программы вместо IE. Я не думаю, что у вас будет много удачи, обманывая самого IE. Похоже, что, перефразируя Стив Джобс, "мешок с болью".


ответил(а) 2021-01-25T18:13:38+03:00 4 месяца, 2 недели назад
45

Если все, что вы пытаетесь сделать, это загрузить файл, вы можете использовать URLDownloadToFile.

ответил(а) 2021-01-25T18:13:38+03:00 4 месяца, 2 недели назад
45

Другой вариант, помимо URLDownloadToFile API-запроса, предложенного Glomek, заключается в использовании AsyncRead, встроенный в VB6.

ответил(а) 2021-01-25T18:13:38+03:00 4 месяца, 2 недели назад
45

Лучше всего создать отдельное приложение для загрузки, используя какой-либо .NET http-объект, чтобы загрузить файл.
Я бы рекомендовал WebClient.


Если вам действительно нужно придерживаться VB6, я уверен, что вы можете использовать некоторые основные работы сокета, чтобы напрямую загрузить файл.

ответил(а) 2021-01-25T18:13:38+03:00 4 месяца, 2 недели назад
45

Интерфейс Internet Explorer работает с ActiveX через элемент управления WebBrowser (содержится в% systemroot%\system32\shlwapi.dll). Хотя это может быть и не очень элегантно, вы можете легко разместить элемент управления где-нибудь в видимой области формы.


Элемент управления очень прост в использовании.

ответил(а) 2021-01-25T18:13:38+03:00 4 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема