Documentの複写を行なうには?(WebBrowser)

解決


GOMA  2005-03-23 04:15:00  No: 88993

環境:Windows2000(SP4)
言語:VB6.0(SP6)

いつもお世話になっております。
又WebBrowser関連の質問なのですが、

起動済みのIEブラウザの任意のドキュメント内容を、
VBフォームに貼り付けたWebBrowserのドキュメント部に持ってくる事は
可能でしょうか?

起動済みのIEからドキュメントオブジェクトを取得するまではわかるのですが、
それを如何にしてVBフォーム内のコントロールにもってくるかが、わかりません。

中間ファイルを経由しても構いません。
APIのURLDownloadToFileは知っているのですが、「今IEに表示されている状態」を
取得したいのです。

宜しくお願い致します。


魔界の仮面弁士  2005-03-23 06:06:21  No: 88994

こんな感じでいけるかな……。Documentプロパティから、
現在表示中のIPersistを取得して、それを表示させてみました。

Option Explicit

Private Sub Form_Load()
    Command1.Caption = "ブラウザ列挙"
    WebBrowser1.Navigate2 "about:blank"
    WebBrowser1.Visible = False
End Sub

Private Sub Command1_Click()
    List1.Clear
    Dim O As Object
    For Each O In CreateObject("Shell.Application").Windows()
        If TypeName(O.Document) = "HTMLDocument" Then
            List1.AddItem O.Document.Title
            List1.ItemData(List1.NewIndex) = O.hWnd
        End If
    Next
End Sub

Private Sub List1_DblClick()
    Dim IEDoc As IPersistStreamInit
    Dim WBDoc As IPersistStreamInit

    Set WBDoc = Me.WebBrowser1.object.Document

    Dim h As Long
    Dim O As Object
    h = List1.ItemData(List1.ListIndex)
    For Each O In CreateObject("Shell.Application").Windows()
        If O.hWnd = h Then
            Set IEDoc = O.Document
            Exit For
        End If
    Next
    If IEDoc Is Nothing Then
        MsgBox "ドキュメント取得失敗", vbInformation
    Else
        Dim Bin As ADODB.Stream 'IStreamインターフェイス
        Set Bin = New ADODB.Stream
        Bin.Type = adTypeBinary
        Bin.Open
        IEDoc.Save Bin, True
        Bin.position = 0
        WBDoc.Load Bin
        Me.WebBrowser1.Visible = True
        Set IEDoc = Nothing
    End If
    Set WBDoc = Nothing
End Sub

上記では、IPersistStreamInitインターフェイスを用いていますが、
メモリではなく、ファイル経由でのやりとりが必要な場合は、
IPersistFileインターフェイスを利用してみてください。

なお、ファイルでアクセスするにしても、オンメモリで処理するにしても、
ロケーションの制御までは組み込まれていませんから、
   <a href="http://www.google.co.jp/">〜</a>
のようなリンクは正しくジャンプできますが、
   <a href="wwwlng.cgi?print+200503/05030018.txt">〜</a>
のような、相対パスで記述された URL については対処できません。
これについては、もう少し考慮する必要があるかも知れませんね。


GOMA  2005-03-25 19:49:55  No: 88995

>魔界の仮面弁士さん
いつもありがとうございます。
返事が遅くなって申し訳ありません。色々ありまして、、。

ロケーションの制御に関しては、そのリンク先に移動させる事はないので問題ありません。
現状のIEのエレメント構成(画像などは不要)さえ取得できれば良いです。

教えて頂いた方法ですと、URLによってはソースが文字列として表示されるようです。
「IPersis」などをキーにログを見ると同じく魔界の仮面弁士の書き込みで、
ファイルに出力する方法があり、そちらの方が比較的安定しているように思えるので、
そちらの方向で進めていこうと思います。

対処URLでcharsetが設定されていない場合、保存したファイルを開くとき
エンコードが正しく認識されない場合がありますが、これはIEから.html形式で保存しても
同様の動きをするので、仕方のない事かな、と思います。

とりあえず、一件落着できそうです。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加