WebBrowserの画面キャプチャ への返答
    投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
        投稿者 YAS  (社会人)
        
        投稿日時 
            2011/5/3 15:45:24
        
    
    
        Webページ全体をキャプチャしたいのなら次のようなコードでどうでしょうか。
ただ,フレームを使っているWebページの場合にはうまくいかないこともあると思います。
    
ただ,フレームを使っているWebページの場合にはうまくいかないこともあると思います。
Imports System.Runtime.InteropServices
Public Class Form1
    Enum DVASPECT As Integer
        CONTENT = 1
        THUMBNAIL = 2
        ICON = 4
        DOCPRINT = 8
    End Enum
    <DllImport("ole32.dll")> _
    Public Shared Function OleDraw( _
        ByVal pUnk As IntPtr, _
        ByVal dwAspect As Integer, _
        ByVal hdcDraw As IntPtr, _
        ByRef lprcBounds As Rectangle) _
        As Integer
    End Function
    Dim WithEvents WebBrowser1 As New WebBrowser
    Dim WithEvents Button1 As New Button
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.WebBrowser1.Dock = DockStyle.Fill
        Me.Button1.Text = "キャプチャ"
        Me.Controls.AddRange({Button1, WebBrowser1})
        Me.WebBrowser1.GoHome()
    End Sub
    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
        Me.Button1.Enabled = True
    End Sub
    Private Sub WebBrowser1_Navigating(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserNavigatingEventArgs) Handles WebBrowser1.Navigating
        Me.Button1.Enabled = False
    End Sub
    Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim BodyStyle As String = Me.WebBrowser1.Document.Body.Style
        Dim BrowserSize As Size = Me.WebBrowser1.Size
        Me.WebBrowser1.Visible = False
        Me.WebBrowser1.Document.Body.Style &= "overflow-x:hidden;overflow-y:hidden" 'スクロールバーを消す 
        Dim ImageRect As Rectangle = Me.WebBrowser1.Document.Body.ScrollRectangle
        Me.WebBrowser1.Size = ImageRect.Size
        Using WebImage As New Bitmap(ImageRect.Size.Width, ImageRect.Size.Height)
            Using g As Graphics = Graphics.FromImage(WebImage)
                Dim pUnk As IntPtr = Marshal.GetIUnknownForObject(Me.WebBrowser1.ActiveXInstance)
                Dim hDc As IntPtr = g.GetHdc
                OleDraw(pUnk, DVASPECT.CONTENT, hDc, ImageRect)
                g.ReleaseHdc(hDc)
                Marshal.Release(pUnk)
            End Using
            WebImage.Save(My.Computer.FileSystem.SpecialDirectories.Desktop & "\WebImage.bmp")
        End Using
        Me.WebBrowser1.Size = BrowserSize
        Me.WebBrowser1.Document.Body.Style = BodyStyle
        Me.WebBrowser1.Visible = True
    End Sub
End Class
    
        投稿者 るきお  (社会人)
        
        投稿日時 
            2011/4/29 23:16:13
        
    
    
        こんにちは。
一応下のコードでできますが、WebBrowserコントロールのスクロールバー部分の計算方法がわからなかったのでちょっと不完全です。
対象領域の幅と高さを計算するときにスクロールバーを除いた幅と高さを指定したかったのですが、
その方法がわからず、仮にWindows標準設定のスクロールバーの幅と高さをもとに計算するようにしました。
しかも、スクロールバーがないときもスクロールバー分の領域を引き算してしまいます。
誰かわかる方、改造してみてください。
 
 
    
一応下のコードでできますが、WebBrowserコントロールのスクロールバー部分の計算方法がわからなかったのでちょっと不完全です。
対象領域の幅と高さを計算するときにスクロールバーを除いた幅と高さを指定したかったのですが、
その方法がわからず、仮にWindows標準設定のスクロールバーの幅と高さをもとに計算するようにしました。
しかも、スクロールバーがないときもスクロールバー分の領域を引き算してしまいます。
誰かわかる方、改造してみてください。
Public Class Form1
    Private Declare Function PrintWindow Lib "User32" (ByVal hWnd As IntPtr, ByVal hdcBlt As IntPtr, ByVal nFlags As Integer) As Boolean
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        '▼コピー対象領域の幅と高さを計算 
        'WebBrowserコントロールのスクロールバーを除いた領域の計算方法がわからなかったので仮。 
        Dim clientWidth As Integer = WebBrowser1.Size.Width - SystemInformation.VerticalScrollBarWidth
        Dim clientHeight As Integer = WebBrowser1.Size.Height - SystemInformation.HorizontalScrollBarHeight
        '▼一時的な画像保存領域を確保 
        Dim image As New Bitmap(clientWidth, clientHeight)
        '▼WebBrowserコントロールからimage変数に画像をコピー 
        Using targetGraphics As Graphics = Graphics.FromImage(image)
            Dim hDC As IntPtr = targetGraphics.GetHdc()
            PrintWindow(WebBrowser1.Handle, hDC, 0)
            targetGraphics.ReleaseHdc(hDC)
        End Using
        '▼image変数の内容をファイルに保存 
        image.Save("C:\vb\webbrowser.bmp")
        image.Dispose()
    End Sub
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        WebBrowser1.Navigate("http://www.nifty.com/")
    End Sub
End Class
    
        投稿者 777  (社会人)
        
        投稿日時 
            2011/4/29 20:08:34
        
    
    
        他のソフトは使わず、ボタンクリック時にWebBrowser内をキャプチャしたいんです。
    
    
        投稿者 O-157  (その他)
        
        投稿日時 
            2011/4/29 19:01:08
        
    
    
        画面をキャプチャすればいいと思います。
    
    
        投稿者 777  (社会人)
        
        投稿日時 
            2011/4/29 18:21:17
        
    
    
        Button1をクリックすると、WebBrowser内のページをキャプチャし、保存する場所を指定して保存できるコードはありますか?
    
    
1.ボタンやメニューストリップを追加してボタンなどをダブルクリックして
SendKeys.SendWait("%{PRTSC}")
と入力
そしてペイントを起動。編集→貼付けでブラワザの様子を保存することができます。