如何在VB6中使Internet Explorer不可见?

时间:2008-10-26 00:30:33

标签: internet-explorer vb6

这样做:

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

我的工作方式不起作用,因为我基本上需要它能够重定向并提示用户下载文件。有什么想法吗?

6 个答案:

答案 0 :(得分: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

硬编码"C:\foo.doc"当然没有多大意义。我会在响应标头中使用服务器提供的文件名("Content-Type""Content-Disposition",具体取决于您的预期)。

答案 1 :(得分:1)

你可以做几件事。

  • 使用wget之类的外部程序来获取文件而不是IE。您可以使用天鹅座工具在http://www.cygwin.com免费获得wget。这是GPL,所以请注意你是否有商业产品。

  • 编写一个使用HttpWebRequest类的.NET程序来获取文件和shell而不是IE。我不认为你会对IE本身有很多运气。用史蒂夫乔布斯的话来说,听起来像是一个“受伤的袋子”。

答案 2 :(得分:0)

如果您要做的只是下载文件,则可以使用URLDownloadToFile

答案 3 :(得分:0)

Internet Explorer界面通过WebBrowser控件(包含在%systemroot%\ system32 \ shlwapi.dll中)暴露给ActiveX。虽然它可能不是很优雅,但您可以轻松地将控件放在窗体可见区域之外的某处。

控件使用起来非常简单。

答案 4 :(得分:0)

您最好的选择是使用某些.NET http对象创建单独的下载应用程序以下载该文件。 我推荐WebClient。

如果你真的要坚持VB6,我相信你可以使用一些基本的套接字工作来直接下载文件。

答案 5 :(得分:0)

Glomek建议的URLDownloadToFile API调用之外的另一个选择是使用VB6中内置的AsyncRead方法。