tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルWebBrowserで表示中のHTMLのプロパティ取得について
記事No3415
投稿日: 2006/03/23(Thu) 11:34
投稿者こくらうまれ
[OSのVer]:Windows2000    [VBのVer]:VB.NET  
こんにちは。初めて投稿させてもらいます。
WebBrowserでHTMLを表示し、右クリックー>プロパテイで表示される「サイズ」情報を
取得したいのですが、方法はないでしょうか?

どなたかご教授よろしくお願いします。

[ツリー表示へ]
タイトルRe: WebBrowserで表示中のHTMLのプロパティ取得について
記事No3419
投稿日: 2006/03/23(Thu) 13:26
投稿者魔界の仮面弁士
[OSのVer]:Windows    [VBのVer]:VB.NET  
VBのバージョンなども明記してください。

.NET Framework 2.0 の マネージ WebBrowser コントロールと、
ActvieX 版のWebBrowser コントロールでは、扱いが異なるので。

> WebBrowserでHTMLを表示し、右クリックー>プロパテイで表示される「サイズ」情報を
> 取得したいのですが、方法はないでしょうか?
System.Windows.Forms.WebBrowser の DocumentStream プロパティ、
ActiveX 版 WebBrowser の Document プロパティから、ストリームのサイズを
調べてみては如何でしょう。

[ツリー表示へ]
タイトルRe^2: WebBrowserで表示中のHTMLのプロパティ取得について
記事No3420
投稿日: 2006/03/23(Thu) 14:57
投稿者こくらうまれ
[OSのVer]:Windows    [VBのVer]:VB.NET  
魔界の仮面弁士さん。早速のレスありがとうございます。

> VBのバージョンなども明記してください。
バージョンは2003です。

> System.Windows.Forms.WebBrowser の DocumentStream プロパティ、
> ActiveX 版 WebBrowser の Document プロパティから、ストリームのサイズを
> 調べてみては如何でしょう。

頂いたヒントより以下の記述で似たような数値は得られるのですが
wk_len = object_IE.Document.body.innerhtml.length
全体のサイズを求めるプロパティの記述がわかるといいのですが。

よろしくお願いします。

[ツリー表示へ]
タイトルRe^3: WebBrowserで表示中のHTMLのプロパティ取得について
記事No3421
投稿日: 2006/03/23(Thu) 16:09
投稿者魔界の仮面弁士
> 頂いたヒントより以下の記述で似たような数値は得られるのですが
> wk_len = object_IE.Document.body.innerhtml.length
方向性が違います。innerHTML 等からだと、DOMで解析された結果になってしまうため、
元のソースとは、異なる値になってしまいます。

> 全体のサイズを求めるプロパティの記述がわかるといいのですが。
Option Strict Off / エラー処理なしの手抜きサンプル。

Private Sub AxWebBrowser1_DocumentComplete(ByVal sender As Object, _
  ByVal e As AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEvent _
) Handles AxWebBrowser1.DocumentComplete
  Dim Doc As Object = e.pDisp.Document
  Dim PF As System.Runtime.InteropServices.UCOMIPersistFile
  Dim FileName As String = "C:\A.HTML"
  PF = Doc
  PF.Save(FileName, False)
  System.Runtime.InteropServices.Marshal.ReleaseComObject(Doc)
  Dim Message As String
  Message = CStr(e.uRL) & vbCrLf & CStr(FileLen(FileName))
  System.IO.File.Delete(FileName)
  MessageBox.Show(Message)
End Sub

[ツリー表示へ]
タイトルRe^4: WebBrowserで表示中のHTMLのプロパティ取得について
記事No3422
投稿日: 2006/03/23(Thu) 16:50
投稿者魔界の仮面弁士
> > 全体のサイズを求めるプロパティの記述がわかるといいのですが。
> Option Strict Off / エラー処理なしの手抜きサンプル。

ついでに、一時ファイルを使わないサンプル。
  Option Strict Off
  Imports System.Runtime.InteropServices
を宣言して、ADOを参照設定しておいてください。


<ComImport(), Guid("0000010c-0000-0000-C000-000000000046"), _
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)> _
Interface UCOMIPersist
    Sub GetClassID(ByRef pClassId As Guid)
End Interface

<ComImport(), Guid("7FD52380-4E07-101B-AE2D-08002B2EC713"), _
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)> _
Interface UCOMIPersistStreamInit
    Inherits UCOMIPersist
    Shadows Sub GetClassID(<Out()> ByRef pClassId As Guid)
    <PreserveSig()> Function IsDirty() As <MarshalAs(UnmanagedType.U4)> Boolean
    Sub Load(<[In]()> ByVal pStm As UCOMIStream)
    Sub Save(<[In]()> ByVal pStm As UCOMIStream, _
        <[In](), MarshalAs(UnmanagedType.Bool)> ByVal fClearDirty As Boolean)
    Sub GetMaxSize(<Out(), MarshalAs(UnmanagedType.LPArray)> ByRef pCbSize As Long)
    Sub InitNew()
End Interface

Private Sub AxWebBrowser1_DocumentComplete(ByVal sender As Object, _
    ByVal e As AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEvent _
) Handles AxWebBrowser1.DocumentComplete
    Dim ADOStream As New ADODB.StreamClass
    ADOStream.Open()
    ADOStream.Type = ADODB.StreamTypeEnum.adTypeBinary
    Dim UnmanagedStream As UCOMIPersistStreamInit
    UnmanagedStream = DirectCast(AxWebBrowser1.Document, UCOMIPersistStreamInit)
    UnmanagedStream.Save(ADOStream, False)
    System.Runtime.InteropServices.Marshal.ReleaseComObject(UnmanagedStream)
    Dim Message As String = CStr(e.uRL) & vbCrLf & CStr(ADOStream.Size)
    System.Runtime.InteropServices.Marshal.ReleaseComObject(ADOStream)
    MessageBox.Show(Message)
End Sub

[ツリー表示へ]
タイトル蛇足: VB2005の場合
記事No3423
投稿日: 2006/03/24(Fri) 02:50
投稿者魔界の仮面弁士
> > > 全体のサイズを求めるプロパティの記述がわかるといいのですが。
> > Option Strict Off / エラー処理なしの手抜きサンプル。
> ついでに、一時ファイルを使わないサンプル。

さらについでに、.NET 2.0 の System.Windows.Forms.WebBrowser の場合。


Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, _
  ByVal e As WebBrowserDocumentCompletedEventArgs _
) Handles WebBrowser1.DocumentCompleted

    Dim Message As String = e.Url.ToString() & vbCrLf
    Message &= CStr(WebBrowser1.DocumentStream.Length)

    MessageBox.Show(Message)

End Sub


COM 版に比べると、非常にシンプルに書けますね。(^^;

[ツリー表示へ]
タイトルRe: 蛇足: VB2005の場合
記事No3424
投稿日: 2006/03/24(Fri) 04:11
投稿者こくらうまれ
[OSのVer]:Windows    [VBのVer]:VB.NET  
魔界の仮面弁士さん。ありがとうございます。

一時ファイルを使用して全体のサイズを求めることが出来ました。
一時ファイルを利用しないサンプルはソースを理解するのに時間がかかりそうです。(^^;

.NET 2.0だと 非常に便利ですね。
ありがとうございました。

[ツリー表示へ]