By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
444,137 Members | 2,282 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 444,137 IT Pros & Developers. It's quick & easy.

Screen capture control using WebBrowser control and GDI+ in a web app

P: n/a
I'm trying to write a control that will take a screen capture of a
particular website when a user submits a form in a web application; one
of the form fields is for a URL - the control needs to get an image of
that web site so that it can be displayed later as a thumbnail image.

I have code for taking a normal screen capture using GDI+ which works
fine. What I am now trying to do is to modify it so the screen capture
is of a remote website rather than of my PC. To attempt to do this I am
using the .NET WebBrowser control to load the website URL into.

The main bit of code is:
// The method that is called from the ASPX page when the form is
submitted
public static void newxcap2()
{
WebBrowser m_browser = new WebBrowser();
m_browser.Visible = false;
m_browser.DocumentCompleted += new
WebBrowserDocumentCompletedEventHandler(GetScreenC apture);
m_browser.Navigate(m_browser.Url = new
Uri("http://www.bbc.co.uk
}

public static void GetScreenCapture(object sender,
WebBrowserDocumentCompletedEventArgs e)
{
Graphics _g = ((WebBrowser)sender).CreateGraphics();
System.IntPtr desktopDC = GetDC(System.IntPtr.Zero);
Image bm = new Bitmap(300, 300, _g);
Graphics g = Graphics.FromImage(bm);
System.IntPtr bmDC = g.GetHdc();
BitBlt(bmDC, 0, 0, bm.Width,bm.Height, desktopDC, 0, 0,
0x00CC0020 /*SRCCOPY*/);
ReleaseDC(System.IntPtr.Zero, desktopDC);
g.ReleaseHdc(bmDC);
g.Dispose();
bm.Save(@"C:\Documents and
Settings\JP\Desktop\xCapImage.bmp");
}

Having tinkered around with it quite a bit the most I can make it do is
to generate a blank image, other attempts have resulted in various
errors.

Am I on the right track in general here with the use of the WebBrowser
control (to in effect load a webpage behind the scenes) or am I
approaching this in the wrong way?
Thanks

James

Jan 7 '07 #1
Share this Question
Share on Google+
1 Reply


P: n/a
Uhm I'm surprised you're even getting that far. I suspect the Web Browser
requires a hosting container to work with a window. I don't think it will
render unless there's a Windows event loop to refresh the display area...
You can check and see if that's the issue by creating a form and then from
within ASP.NET fire that form with a full Application.Run event loop. That
*might* work better, but even then this might not work. Remember ASP.NET
runs as a service in a system context not on the desktop.

ASP.NET is not really a good way to do this.Aside from the security issues,
this seems like a task for a WinForm application...

+++ Rick ---

--
Rick Strahl
West Wind Technologies
www.west-wind.com/weblog

"JP2006" <ja********@gmail.comwrote in message
news:11**********************@38g2000cwa.googlegro ups.com...
I'm trying to write a control that will take a screen capture of a
particular website when a user submits a form in a web application; one
of the form fields is for a URL - the control needs to get an image of
that web site so that it can be displayed later as a thumbnail image.

I have code for taking a normal screen capture using GDI+ which works
fine. What I am now trying to do is to modify it so the screen capture
is of a remote website rather than of my PC. To attempt to do this I am
using the .NET WebBrowser control to load the website URL into.

The main bit of code is:
// The method that is called from the ASPX page when the form is
submitted
public static void newxcap2()
{
WebBrowser m_browser = new WebBrowser();
m_browser.Visible = false;
m_browser.DocumentCompleted += new
WebBrowserDocumentCompletedEventHandler(GetScreenC apture);
m_browser.Navigate(m_browser.Url = new
Uri("http://www.bbc.co.uk
}

public static void GetScreenCapture(object sender,
WebBrowserDocumentCompletedEventArgs e)
{
Graphics _g = ((WebBrowser)sender).CreateGraphics();
System.IntPtr desktopDC = GetDC(System.IntPtr.Zero);
Image bm = new Bitmap(300, 300, _g);
Graphics g = Graphics.FromImage(bm);
System.IntPtr bmDC = g.GetHdc();
BitBlt(bmDC, 0, 0, bm.Width,bm.Height, desktopDC, 0, 0,
0x00CC0020 /*SRCCOPY*/);
ReleaseDC(System.IntPtr.Zero, desktopDC);
g.ReleaseHdc(bmDC);
g.Dispose();
bm.Save(@"C:\Documents and
Settings\JP\Desktop\xCapImage.bmp");
}

Having tinkered around with it quite a bit the most I can make it do is
to generate a blank image, other attempts have resulted in various
errors.

Am I on the right track in general here with the use of the WebBrowser
control (to in effect load a webpage behind the scenes) or am I
approaching this in the wrong way?
Thanks

James
Jan 7 '07 #2

This discussion thread is closed

Replies have been disabled for this discussion.