2011-12-24 55 views
1

我想下載只有我的VB6程序中的HTML代碼。 Webbrowser控制是好的,但它掛起,也有諸如需要禁用JavaScript中,PIC等,以得到公正的HTML問題只能檢索HTML的inet&webbrowser控件的替代方法?

Inet控制的比較好,但它是「越野車」

有沒有其他控件?

+0

[下載文件 - VB6]的可能重複(http://stackoverflow.com/questions/1976152/download- file-vb6) – MarkJ

回答

4

如果您只想下載頁面的HTML,您可以輕鬆使用Winsock控件。

Private Sub Form_Load() 
    Winsock1.Connect "stackoverflow.com", 80 
End Sub 

Private Sub Winsock1_Close() 
    Winsock1.Close 
End Sub 

Private Sub Winsock1_Connect() 
    Winsock1.SendData "GET /questions/8624871/vb6-alternative-to-inet-webbrowser-control HTTP/1.1" & vbCrLf & "Host: stackoverflow.com" & vbCrLf & vbCrLf 
End Sub 

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) 
    Dim s As String 

    Winsock1.GetData s, vbString 
    RichTextBox1.Text = RichTextBox1.Text & s 
End Sub 
+0

Hrm,這是一個更好的解決方案。我應該真的讀過這個問題... +1 –

+0

如何編輯下載多少百分比? –

+1

@NokImchen標題中應該有'Content-Length:XXXXX',你可以比較'bytesTotal'的累加值。如果頭部中沒有「Content-Length」,那麼只有在連接關閉時才知道它已完成。 – GSerg

3

我的建議是在您的VB 6應用程序中託管WebKit.NET,就像您使用其他.NET控件一樣。

雖然它是一個.NET控件,這意味着它不能在VB 6中使用本機開箱即用,但可以使用.NET開發的控件與VB 6應用程序一起使用。 Microsoft提供Interop Forms Toolkit作爲兩種語言之間的互操作性機制。基本上,你將使用.NET語言之一(它不一定是VB.NET;你也可以使用C#)來創建一個包含你的UserControl的ActiveX DLL,並將它註冊爲COM互操作。然後,您可以將此ActiveX控件添加到您的VB 6項目並掛鉤以處理它引發的事件。

您可以在如何操作here on CodeProjecthere on CodeGuru上找到更完整的示例。

事實上,這種方法不會輕易實現。但是我懷疑這是你唯一的替代方案,因爲當VB 6很流行,並且沒有人再爲VB 6開發新的控件時,IE幾乎支配了瀏覽器市場。

+0

回想起來,我發現我誤解了這個問題(在我的辯護中,它被編輯了; [原文](http://stackoverflow.com/revisions/8624871/1)不太清楚) 。其他一些解決方案對於這個特定的任務*更好。不過,我不會刪除我的答案,因爲對於其他打擊內置WebBrowser控件的其他限制的人可能會有所幫助。 –

+0

是的,我很高興你沒有刪除你的解決方案,因爲它回答了我的問題。多年來,我發現很多答案都非常有用,謝謝。 – kjack

2

你不需要API調用,你不需要WinSock,你不需要Inet,你不需要WebKit的互操作。只需使用本機VB6代碼即可輕鬆完成。這裏有一個很好的帶有示例代碼的article by Karl Peterson

1

這是很好的代碼,甚至可以在ASP,VBScript中使用。

Function GetHTMLCode(strURL) As String 
    Dim strReturn     ' As String 
    Dim objHTTP      ' As MSXML.XMLHTTPRequest 
    If Len(strURL)=0 Then EXIT FUNCTION 
    Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP") 
    objHTTP.open "GET", strURL,False 
    objHTTP.send     'Get it. 
    strReturn =objHTTP.responseText 
    Set objHTTP = Nothing 
    GetHTMLCode = strReturn 
End Function 

現在這樣調用這個函數(總是以協議寫):

Msgbox GetHTMLCode("http://www.stackoverflow.com")