Загрузить изображение из WebBrowser без повторной загрузки или копирования - PullRequest
1 голос
/ 01 сентября 2011

Я сейчас копирую из буфера обмена для загрузки изображения из браузера

IHTMLDocument2 doc = (IHTMLDocument2) webBrowser1.Document.DomDocument;
IHTMLControlRange imgRange = (IHTMLControlRange) ((HTMLBody) doc.body).createControlRange();

foreach (IHTMLImgElement img in doc.images)
{
  imgRange.add((IHTMLControlElement) img);

  imgRange.execCommand("Copy", false, null);

  using (Bitmap bmp = (Bitmap) Clipboard.GetDataObject().GetData(DataFormats.Bitmap))
  {
    bmp.Save(@"C:\"+img.nameProp);
  }
}

Но у него есть некоторые проблемы с использованием буфера обмена. Есть ли другой способ сделать это. В Internet Explorer все изображения попадают во временный каталог, если то же самое происходит здесь, есть ли способ получить путь к этому сохраненному изображению?

1 Ответ

2 голосов
/ 02 сентября 2011

Для каждого изображения на странице вы можете собрать его URL, а затем вызвать функции перечисления кэша WinINET (например, FindFirstURLCacheEntry), чтобы найти файл резервного кэша в папке временных файлов Интернета. Тем не менее, нет никакой гарантии, что файл будет в кеше, поскольку он может быть доставлен с заголовками, которые запрещают кеширование и т. Д.

Один из подходов, который вы могли бы рассмотреть, - это использование FiddlerCore (www.fiddler2.com/core) в вашем приложении; затем вы можете «зацепить» все переданные изображения и делать с ними все, что захотите.

...