Скриншоты сайтов на .Net

Как оказалось делать скриншоты сайтов не такая уж и простая задача. Но выход из нее можно найти создавая отдельным потоком скрытую форму с объектом WebBrowser и используя некоторые компоненты MS IE7+.
Ниже идет малокомментированный код, который подскажет Вам, как это правильнее всего сделать. Если есть вопросы, то гуглите и разбирайтесь в документации:
Copy Source | Copy HTML
  1. #region private event handlers
  2.  
  3.  
  4.     /// <summary>
  5.     /// События результата открытия страницы в браузере _webBrowser.Navigate(url.OriginalString);
  6.     /// </summary>
  7.     private unsafe void OnDocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
  8.     {
  9.         WebBrowser browser = (sender as WebBrowser);
  10.         if (browser != null)
  11.         {
  12.             if(!browser.DocumentText.Contains("<!--Error Body-->"))//если открылось
  13.             {
  14.                 int width = browser.Document.Body.ScrollRectangle.Size.Width;
  15.                 int height = browser.Document.Body.ScrollRectangle.Size.Height;
  16.                 this.Size = browser.Document.Body.ScrollRectangle.Size;
  17.                 this.ClientSize = browser.Document.Body.ScrollRectangle.Size;
  18.  
  19.                 this.Height = 10;
  20.                 this.Width = 20;
  21.                 browser.Width = width;
  22.                 this.Top = -200;
  23.                 browser.Top = -100;
  24.                 browser.Height = 5000;//height;
  25.                 panel.AutoScrollPosition = new Point(300, 300);
  26.                 this.Refresh();
  27.                 //повторный рендеринг страницы тут нужен
  28.                 back.RunWorkerAsync();
  29.             }
  30.         }
  31.     }
  32.  
  33.     void back_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  34.     {
  35.         WebBrowser browser = this._webBrowser;
  36.         if (browser != null)
  37.         {
  38.             if (!browser.DocumentText.Contains("<!--Error Body-->"))
  39.             {
  40.                 int width = browser.Document.Body.ScrollRectangle.Size.Width;
  41.                 int height = browser.Document.Body.ScrollRectangle.Size.Height;
  42.                 //объект из IE7+
  43.                 mshtml.IHTMLDocument2 document = (browser.Document.DomDocument as mshtml.IHTMLDocument2);
  44.  
  45.                 if (document != null)
  46.                 {
  47.                     mshtml.IHTMLElement element = (document.body as mshtml.IHTMLElement);
  48.                     if (element != null)
  49.                     {
  50.                         IHTMLElementRender render = (element as IHTMLElementRender);
  51.                         if (render != null)
  52.                         {
  53.                             Image img = new Bitmap(width, height);
  54.                             using (Graphics graphics = Graphics.FromImage(img))
  55.                             {
  56.                                 IntPtr hdcDestination = graphics.GetHdc();
  57.                                 render.DrawToDC(hdcDestination);
  58.                                 graphics.ReleaseHdc(hdcDestination);
  59.                               //  browser.DrawToBitmap((Bitmap)img, new Rectangle(0, 0, width, height));
  60.                                 string FileName = wheretosave;
  61.                                 _webBrowser.DrawToBitmap((Bitmap)img, new Rectangle(0, 0, width, height));
  62.                                 img.Save(FileName);
  63.                             }
  64.                         }
  65.                     }
  66.                 }
  67.             }
  68.         }
  69.         this.Close();
  70.     }
  71.  
  72.     void back_DoWork(object sender, DoWorkEventArgs e)
  73.     {
  74.         Thread.Sleep(5000);
  75.     }
  76.  
  77.     #endregion

Метки:   Категории:Csharp | Code


blog comments powered by Disqus

Добавить комментарий

Кто я?

Программист. Я слежу за блогосферой и знаю, как будет развиваться интернет. Когда у меня есть время я даже прилагаю для этого усилия. Подробнее

Последние комментарии

Не отображать

Topbot at FeedsBurner

Облако тэгов

Мои Твиты

Twitter апреля 23, 18:27
⚫️Тематика черного цвета для России http://dlvr.it/QQWQ8B https://twitter.com/f1ashr/status/988484514685960195/photo/1

Twitter апреля 23, 10:44
Голосовой набор тэгов http://dlvr.it/QQSx71

Twitter апреля 19, 09:13
Польша сняла мини-фантастику про 2-й час http://dlvr.it/QQ36lD https://twitter.com/f1ashr/status/986895676582674432/photo/1

Twitter апреля 15, 09:31
Больше Ада на первом канале http://dlvr.it/QPb8Sf https://twitter.com/f1ashr/status/985450416811884545/photo/1

Twitter апреля 15, 08:59
Суперлайки в Перископе http://dlvr.it/QPb3HN

Twitter апреля 14, 08:51
Что американские военные забыли у берегов КНДР? http://dlvr.it/QPVZ8F https://twitter.com/f1ashr/status/985078070875832320/photo/1

Twitter апреля 13, 19:41
Текущая ситуация с инстаграммом http://dlvr.it/QPS7sy

Twitter апреля 13, 15:50
Русский youtube и твиты за день http://dlvr.it/QPR1dl https://twitter.com/f1ashr/status/984821028940427264/photo/1

Twitter апреля 13, 15:50
Как потратить валютные резервы России - Мыслить №50 http://dlvr.it/QPR1Xz

Twitter апреля 13, 14:12
Японское аниме в российских кинотеатрах http://dlvr.it/QPQSG3 https://twitter.com/f1ashr/status/984796468316815360/photo/1

Twitter апреля 13, 13:08
Полное затмение суперлуны 27 сентября (впервые с 1982 года) http://dlvr.it/QPQ5q6 https://twitter.com/f1ashr/status/984780360230649857/photo/1

Twitter апреля 13, 12:03
Реклама Андромеды http://dlvr.it/QPPkwn https://twitter.com/f1ashr/status/984764125942243328/photo/1

Twitter апреля 13, 11:31
Теневой бизнес ГИБДД http://dlvr.it/QPPZnf https://twitter.com/f1ashr/status/984755956763340800/photo/1

Twitter апреля 13, 10:27
В Ступино напечатали первый 3D дом http://dlvr.it/QPPG1p

Twitter апреля 13, 10:27
Google Glasses fail http://dlvr.it/QPPFz6 https://twitter.com/f1ashr/status/984739734407671808/photo/1

Twitter апреля 13, 08:49
Пришел ответ от Youtube по поводу видео http://dlvr.it/QPNpH6

Twitter апреля 12, 19:39
Автоматическое информирование о выходе новых сезонов http://dlvr.it/QPL4pB

Twitter апреля 11, 07:28
Разбор сериала "Молодой папа" (теория общего знания, часть 22) http://dlvr.it/QP7wlv https://twitter.com/f1ashr/status/983970149765038085/photo/1

Twitter апреля 11, 01:33
В бюджете Америки появились лишние 2 трлн. долларов http://dlvr.it/QP6nN4

Twitter апреля 11, 01:33
Про школьников и Навального http://dlvr.it/QP6nMt

Мой твиттер

Копирайт

Все мысли, высказанные в блоге, являются моим мнением и за это мнение меня никто не забанит! Кроме того, никто не имеет право копировать материалы блога без использования ctrl+C/V!

© Copyright 2008