노력에 표시된 기술을 사용하고
에서 WebBrowser 컨트롤의 화면 풍경을 수행 에 WebBrowser
컨트롤을 배치하면 코드가 제대로 작동합니다. 그러나 스레드 내에서 실행될 때 데스크탑의 임의 이미지를 제공하여 실패합니다.
Thread browserThread = new Thread(() =>
{
WebBrowser br = new WebBrowser();
br.DocumentCompleted += webBrowser1_DocumentCompleted;
br.ProgressChanged += webBrowser1_ProgressChanged;
br.ScriptErrorsSuppressed = true;
br.Navigate(url);
Application.Run();
});
browserThread.SetApartmentState(ApartmentState.STA);
browserThread.Start();
private Image TakeSnapShot(WebBrowser browser)
{
int width;
int height;
width = browser.ClientRectangle.Width;
height = browser.ClientRectangle.Height;
Bitmap image = new Bitmap(width, height);
using (Graphics graphics = Graphics.FromImage(image))
{
Point p = new Point(0, 0);
Point upperLeftSource = browser.PointToScreen(p);
Point upperLeftDestination = new Point(0, 0);
Size blockRegionSize = browser.ClientRectangle.Size;
blockRegionSize.Width = blockRegionSize.Width - 15;
blockRegionSize.Height = blockRegionSize.Height - 15;
graphics.CopyFromScreen(upperLeftSource, upperLeftDestination, blockRegionSize);
}
return image;
}
이 분명히 있기 때문에 방법 Graphics.CopyFromScreen()
의 발생하지만 다른 방법의 인식입니다. 누구든지이 문제를 해결할 수있는 방법이 있습니까? 또는 양식을 만들고, 컨트롤을 추가하고, 보이게 한 다음 화면을 긁어 내릴 수있는 유일한 방법입니까? 명백한 이유 때문에 나는 그러한 접근법을 피하기를 바라고 있습니다.
정확히 내가 필요로하는 것. WebBrowser.DrawToBitmap()과 같은 것을 찾았지만 intellisense에는 나타나지 않았지만 여전히 괜찮습니다. 고맙습니다! –
또한 System.Windows.Forms.SystemInformation을 보여 주셔서 감사합니다. 결코 전에 그것을 보지 않으며 명백하게 아주 유용하다. –
우수. 정확히 내가 필요로하는 것. – Tomer