Как сделать Internet Explorer открытым невидимым в VB6? - PullRequest
3 голосов
/ 26 октября 2008

Делаем так:

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

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

Ответы [ 6 ]

5 голосов
/ 27 октября 2008

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

То, что решает вашу проблему более элегантно, это использование WinHTTPRequest. В вашем проекте укажите «Microsoft WinHTTP Services, версия 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", в зависимости от того, что вы ожидаете).

1 голос
/ 26 октября 2008

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

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

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

0 голосов
/ 28 октября 2008

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

0 голосов
/ 27 октября 2008

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

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

0 голосов
/ 26 октября 2008

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

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

0 голосов
/ 26 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...