Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WebBrowser控件内容宽度/高度_C#_Webbrowser Control - Fatal编程技术网

C# WebBrowser控件内容宽度/高度

C# WebBrowser控件内容宽度/高度,c#,webbrowser-control,C#,Webbrowser Control,我很难根据一个完全加载的页面的内容,通过编程来确定webbrowser的宽度和高度。我需要这些信息来捕获网页的截图 这发生在按钮单击事件中 wbNY.Navigate(new Uri("http://www.website.com"), "_self"); wbNY.DocumentCompleted += wbNY_DocumentCompleted; 这是我的文档完成代码 private void wbNY_DocumentCompleted(object sender, WebBrows

我很难根据一个完全加载的页面的内容,通过编程来确定webbrowser的宽度和高度。我需要这些信息来捕获网页的截图

这发生在按钮单击事件中

wbNY.Navigate(new Uri("http://www.website.com"), "_self");
wbNY.DocumentCompleted += wbNY_DocumentCompleted;
这是我的文档完成代码

private void wbNY_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    if (e.Url == wbNY.Url)
    {
        if (wbNY.ReadyState == WebBrowserReadyState.Complete)
        {
            DoPageChecks();
        }
    }
}
在DoPageChecks中,我调用此方法

TakeScreenshot(wbNY);
这是我截图的方法

protected void TakeScreenshot(WebBrowser wb)
{
    Size pageSize = new Size(wb.Document.Window.Size.Width,wb.Document.Window.Size.Height)
}
我的屏幕截图代码运行良好,所以我只是显示所有内容,直到我试图获得webbrowser内容的高度和宽度,这样我就可以拍摄具有正确尺寸的屏幕截图

我也试过了

    Size pageSize = new Size(wb.Document.Body.ScrollRectangle.Width,wb.Document.Body.ScrollRectangle.Height)
但这也没有给出正确的值


更具体地说,高度是0,有时是~20px,当实际结果应该更接近您想要得到的800px+

时,它们返回渲染的高度和宽度,这是您拍摄屏幕截图时所需要的。最后,我发现mshtml具有获取宽度/高度的工具

最后的屏幕截图方法:

protected void TakeScreenshot(WebBrowser wb)
{
    mshtml.IHTMLDocument2 docs2 = (mshtml.IHTMLDocument2)wbNY.Document.DomDocument;
    mshtml.IHTMLDocument3 docs3 = (mshtml.IHTMLDocument3)wbNY.Document.DomDocument;
    mshtml.IHTMLElement2 body2 = (mshtml.IHTMLElement2)docs2.body;
    mshtml.IHTMLElement2 root2 = (mshtml.IHTMLElement2)docs3.documentElement;

    int width = Math.Max(body2.scrollWidth, root2.scrollWidth);
    int height = Math.Max(root2.scrollHeight, body2.scrollHeight);

    // Resize the control to the exact size to display the page. Also, make sure scroll bars are disabled
    wb.Width = width;
    wb.Height = height;

    Bitmap bitmap = new Bitmap(width, height);
    wb.DrawToBitmap(bitmap, new Rectangle(0, 0, width, height));
    bitmap.Save(SaveImgDirectory + filename);
}

我看不到这些特定属性,但wb.Width/Height返回设计器中控件的指定宽度/高度。我不是典型意义上的截图,而是在webbrowser控件中创建内容的位图图像。问题是无论webbrowser控件的静态大小如何,我都无法获取页面的尺寸。如果我将控件设置为100px乘以100px,这就是我的屏幕截图的大小,会截取整个页面的大部分。因为我不知道逐页需要的确切维度,所以我需要在fly@user1691808啊,我错了。我想你手上可能有一扇窗户,而不是一扇窗户,因此没有那些有用的东西。您是WPF、Winforms还是Silverlight?@user1691808好的,通过您的解决方案,我发现这不是一个普通的“屏幕截图”。我开发了一个应用程序,看看什么样的道具可以给你宽度和高度,在正常意义上,wb.Size.height和wb.Size.width对我来说很有用。我可以看出,您需要的不仅仅是这些。@user1691808,我的代码:我显示了高度和宽度,以便在调整窗口大小时看到发生了什么。保存的位图不正确<代码>私有无效按钮1\u单击(对象发送者,事件参数e){int height=webBrowser1.Size.height;int width=webBrowser1.Size.width;textBoxHeight.Text=height.ToString();textBoxWidth.Text=width.ToString();位图位图=new位图(宽度,高度);webBrowser1.DrawToBitmap(位图,新矩形(0,0,宽度,高度);bitmap.Save(“test.bmp”);}cool,哦,你的位图确实包含了正确的图像,当我尝试它时,图像是白色的。是的,它工作得很好。如果你得到的是白色图像,可能是因为你没有正确地等待整个页面加载。请参阅我的原始帖子,了解我如何确定何时可以最终获取图像。