Short answer: if you mean the legacy Windows Forms WebBrowser control, Microsoft does not document a supported direct screenshot API for it, and DrawToBitmap is explicitly unsupported for this control. For a supported capture workflow, use WebView2 and its CoreWebView2.CapturePreviewAsync method. If you must keep the legacy control, treat lower-level rendering techniques as unverified, configuration-dependent workarounds—not a dependable drop-in API.
This is about capturing a browser control’s rendered content, not taking a screenshot of the monitor. That distinction matters when the form is obscured, minimized, clipped, or running without a visible window.
Why DrawToBitmap is not the answer
Windows Forms exposes Control.DrawToBitmap, but the legacy WebBrowser control is a special case. Microsoft marks the method unsupported for WebBrowserBase, and the .NET reference source says it does not work for this control. It may yield a blank or incomplete bitmap; calling it with different bounds does not turn it into a supported capture path.
The legacy WinForms WebBrowser is a managed wrapper around the ActiveX WebBrowser control. It uses the browser version installed on the user’s computer, so behavior can vary across deployment machines. That browser and runtime dependence is another reason not to treat an undocumented rendering workaround as universally reliable.
Recommended Free Tools
#1 Best Overall
- 14" diagonal, 1366x768 resolution, HD BrightView LED, Glossy NON-TOUCH Display
A desktop screenshot tool is not an equivalent fix: it captures pixels visible on the monitor, rather than asking the embedded browser to provide its rendered image. It can include other windows, miss content outside the visible area, or fail when the application is not displayed as expected.
Choose the route that matches your project
| Situation | Practical route | What to expect |
|---|---|---|
| You can change the WinForms browser control | Use WebView2 and CoreWebView2.CapturePreviewAsync. |
A documented image-capture API writes image data to a stream. |
You must retain legacy WebBrowser |
There is no supported direct screenshot route established here. Investigate any lower-level workaround only as project-specific engineering. | Validate it on the actual .NET Framework, Windows, browser version, visibility, clipping, DPI, and page content you deploy. |
| You need a printed document | Use WebBrowser.Print() with the current print and page settings. |
This is a print operation, not a bitmap of the current browser viewport. |
| You need a screenshot of a public page by URL, not a particular in-app control instance | A website screenshot API can render the URL separately. | It does not capture the state of your existing WinForms control, session, or unsaved in-memory page changes. |
Capture a WebView2 image in WinForms
WebView2 provides CoreWebView2.CapturePreviewAsync. Supply an image format and a writable stream, then await the operation before reading or saving the bytes. Capture timing is important: wait for the page’s ContentLoading event. Before the first such event, capture can fail; during later navigations, capturing too early can return the page being navigated away from.
Example: capture after content loading
The following event-based example assumes a WinForms form already contains a WebView2 control named webView. It saves a PNG after a navigation begins loading content. Add the WebView2 SDK package appropriate to your project and ensure the WebView2 runtime is available in the target environment.
using Microsoft.Web.WebView2.Core;
using System;
using System.IO;
using System.Threading.Tasks;
using System.Windows.Forms;
private bool captureOnNextContentLoading;
private async void captureButton_Click(object sender, EventArgs e)
{
await webView.EnsureCoreWebView2Async();
captureOnNextContentLoading = true;
webView.CoreWebView2.Navigate("https://example.com");
}
private async void webView_CoreWebView2InitializationCompleted(
object sender,
CoreWebView2InitializationCompletedEventArgs e)
{
if (!e.IsSuccess)
{
MessageBox.Show("WebView2 initialization failed.");
return;
}
webView.CoreWebView2.ContentLoading += async (s, args) =>
{
if (!captureOnNextContentLoading)
return;
captureOnNextContentLoading = false;
await SavePreviewAsync("capture.png");
};
}
private async Task SavePreviewAsync(string path)
{
try
{
using (var stream = new MemoryStream())
{
await webView.CoreWebView2.CapturePreviewAsync(
CoreWebView2CapturePreviewImageFormat.Png,
stream);
stream.Position = 0;
using (var file = File.Create(path))
{
await stream.CopyToAsync(file);
}
}
}
catch (Exception ex)
{
MessageBox.Show("Could not capture the WebView: " + ex.Message);
}
}
Wire webView_CoreWebView2InitializationCompleted to the control’s initialization-completed event, or register the handler after initialization in your form’s setup code. In production code, also prevent overlapping navigations or captures: this small example intentionally arms one capture for the next content-loading event only.
Rank #2
- 1.1 GHz (boost up to 2.4GHz) Intel Celeron N5030 Quad-Core
- 4GB DDR4 System Memory; 128GB Solid State Drive
- 11.6" HD (1366 x 768) Multi-Touch Display
- Combo headphone/microphone jack - Noble Wedge Lock slot - HDMI; 2 USB 3.1 Gen 1
- Windows 11 Pro
What the image represents
The API writes an image of the displayed WebView to the stream. It is not a full-desktop screenshot. It also is not a promise that the page has finished all later activity: scripts, delayed images, animations, or network requests may still change what is displayed after content loading starts. If the required frame depends on one of those events, wait for an application-specific condition before invoking capture, and verify the resulting image for the pages you support.
If you cannot replace the legacy control
The official Microsoft material covered here does not establish a supported direct screenshot method for the old WebBrowser control. Some developers investigate lower-level OLE/COM rendering interfaces, but the behavior of such an approach is not established as a general solution here. Do not ship one based solely on an example that happens to work on a development machine.
- Test the exact Windows and .NET Framework configurations you deploy; legacy
WebBrowseruses the installed ActiveX browser version. - Test both visible and obscured windows, clipped controls, multiple DPI settings, and the page content types your application actually uses.
- Check whether the workaround captures the intended viewport, handles scrolling, and produces correct output after navigation.
- Keep a fallback or migration plan if capturing pixels is a required product feature rather than a best-effort diagnostic.
If the screenshot is a hard requirement and control-level capture must be supported, migration to WebView2 is the clearer route: Microsoft recommends WebView2 for new WinForms projects, and it has a specific capture method.
When printing is the right alternative
WebBrowser.Print() sends the currently displayed document through the current print and page settings. Microsoft’s printing example waits for DocumentCompleted before printing, and demonstrates a browser instance that need not be displayed. This can suit a document-printing workflow, but the result is governed by print settings and is not an image of the control’s current viewport. Choose it for print output, not when the requirement is a PNG of what the control displays.
Do these 3 things before closing this tab:
1Fix the driver behind crashes, sound loss and screen glitches2Clear out junk files and repair common Windows errors3Scan for outdated or missing drivers - takes under a minuteRank #3
- 256 GB SSD of storage.
- Multitasking is easy with 16GB of RAM
- Equipped with a blazing fast Core i5 2.00 GHz processor.
Or skip the browser setup
If your actual input is a page URL rather than a specific live WinForms control, ScreenshotNeo can return a website screenshot in one request. It cannot capture the state of an already-running desktop control; it loads the supplied URL separately. See the ScreenshotNeo API documentation for request options and response details.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://example.com -o shot.webp
- Cookie/consent banners are accepted and removed before the shot; newsletter popups and chat widgets are also removed. Each step can be turned off.
- Bot checks/CAPTCHAs, blank pages, timeouts, failed loads, and cache hits cost nothing; response headers identify the page verdict and whether it was billed.
- An MCP server provides
take_screenshot,get_page_info, andcapture_pdftools for Claude, Cursor, and other MCP clients. - The Free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000 screenshots.
Sign up free for 1,000 screenshots a month—no card required.
Troubleshooting WebView2 capture
The call fails before the page appears
Make sure WebView2 initialization completed and that the first ContentLoading event has occurred. A capture before the first content-loading event can fail. Await EnsureCoreWebView2Async before accessing CoreWebView2.
The image shows the previous page
The capture may have run too early during a later navigation. Arm the capture for the relevant navigation and wait for its content-loading event rather than capturing immediately after calling Navigate.
The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Rank #4
- EFFORTLESS EVERYDAY PERFORMANCE: Powered by Intel Celeron N4020 processor and Windows 11 Home system, delivering reliable, low-power efficiency for daily tasks like document editing, email, online classes, and web browsing
- 15.6-INCH FULL HD DISPLAY: Enjoy immersive visuals on the 15.6" FHD (1920x1080) anti-glare screen with micro-edge bezels. Delivers clear details and comfortable viewing for long study sessions, working on spreadsheets, and video playback
- RESPONSIVE MULTITASKING & STORAGE: Built with 4GB LPDDR4 RAM and 128GB eMMC storage for smooth daily essential use. Expand your storage by up to 1TB via the integrated TF card slot to easily store movies, photos, and working files
- ADVANCED CONNECTIVITY: Outfitted with 2x Full-Featured Type-C ports for data transfer, fast charging, and dual-monitor output, alongside 2x USB 3.2 Gen1 ports and a 3.5mm audio jack for complete peripheral compatibility
- LIGHTWEIGHT & SILENT OPERATION: Slim and portable for effortless travel or commuting. Features a 1MP HD webcam for remote meetings, 38Wh battery with 45W Type-C fast charging, and a fanless silent design for peaceful work environments.
The output file is empty or unreadable
Use a writable stream, await CapturePreviewAsync, and only then copy or save the stream. Reset the stream position before reading it. Also ensure the destination path is writable and that file-handling code does not dispose the stream before the copy completes.
The screenshot misses later page changes
ContentLoading establishes a useful navigation boundary; it does not guarantee every dynamic page operation has finished. Wait for the application’s own readiness condition when the capture depends on delayed or scripted content, then validate the output.
DrawToBitmap produces a blank result
This is consistent with Microsoft’s statement that DrawToBitmap does not work for the legacy browser control. Do not treat a blank bitmap as a bounds or scaling problem without evidence; use WebView2 when a supported capture API is available.
Performance, reliability, and deployment considerations
Capture is asynchronous, so keep the UI responsive by awaiting it rather than blocking the WinForms thread. Handle initialization and capture exceptions, and avoid overlapping capture operations against navigations whose output must be associated with a particular URL. Save to a stream or file only after the asynchronous capture finishes.
Best Value
- WINDOWS 11 | STABLE PERFORMANCE: Powered by Intel Celeron N4020 processor and Windows 11 system, this laptop delivers stable performance for everyday computing tasks. It supports web browsing, online learning, document editing, email communication, and basic office work with optimized power efficiency, providing a practical and reliable experience for essential daily use for daily use.
- 15.6” FHD IPS DISPLAY: Features a 15.6-inch Full HD IPS display with narrow bezels, offering wider viewing angles and clearer image details compared to standard panels. The improved screen-to-body ratio enhances visual experience for study, reading, document work, and video playback, making it suitable for both productivity and entertainment use.
- 4GB DDR4 + 128GB eMMC STORAGE: Equipped with 4GB DDR4 memory and 128GB eMMC storage for everyday basics such as browsing, documents, email, and online learning platforms. The built-in TF card slot supports storage expansion up to 1TB, giving you more flexibility for files, photos, videos, and daily documents. TF card not included.
- CONNECTIVITY & PORTS: Includes 1× TF card slot, 2× USB 3.2 Gen1 ports, and 2× full-featured Type-C ports (USB 3.2 Gen1). The Type-C ports support data transfer, charging, and video output, enabling flexible connection with external devices such as monitors, storage, and peripherals for daily work and study use.
- LIGHTWEIGHT DESIGN | ONLINE COMMUNICATION: Designed with a slim, portable profile, this laptop is easy to carry for school, commuting, and travel. A built-in 1MP front camera supports online classes, video meetings, remote communication, and everyday conferencing. The 3300mAh battery works with the low-power system design to support practical daily use, while thermal optimization helps maintain quieter operation during extended tasks.
The legacy control’s dependence on the locally installed browser version makes cross-machine consistency a deployment concern. WebView2 provides a named API but still requires a compatible SDK/runtime setup; verify the version and runtime availability used by your application. No universal timing rule can guarantee a stable frame for every dynamically rendered site, so define the page-ready condition your application needs.
For a URL-based service, separately consider that it renders a URL rather than reusing your desktop control’s browser state. A URL screenshot cannot automatically include cookies, authentication, or unsaved UI state held only inside the application. Use the control’s own capture route when that state is essential.
Frequently asked questions
Can I capture a WebBrowser control while it is hidden?
The documented material here does not establish a supported hidden-control capture technique for the legacy control. Do not assume a workaround will behave the same when hidden, clipped, or obscured; test the exact deployment conditions or migrate to WebView2.
Does CapturePreviewAsync create a full-page image?
It captures an image of the displayed WebView. The cited API description does not establish it as a full-document, scroll-expanding capture, so do not equate it with a full-page website screenshot without validating the output and the specific API version you use.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

