2008-10-26 2 views
3

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

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

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

+1

Любая конкретная причина, по которой вам нужен IE, чтобы вызвать пользователя? Почему бы просто не сделать свое приглашение, а затем использовать свой собственный код для загрузки файла. HTTP-запросы (именно это будет делать IE) довольно стандартизированы и, в основном, легко кодируются. – 2008-10-26 01:10:55

ответ

1

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

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

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

+0

Просто казалось, что есть простой способ открыть то же самое и указать на ссылку, т. Е. На самом деле становится видимой :(Угадай, – 2008-10-26 00:38:22

0

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

+0

Это будет работать нормально, но то, что я хотел сделать, это поразить мою отдельную папку в моем домене, которая отслеживает, сколько раз загружается мое приложение.Таким образом, у одной страницы есть счетчик, который попадает и перенаправляется в фактическое место загрузки. – 2008-10-26 00:43:16

0

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

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

0

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

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

5

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 

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

0

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