1. 目的
在Codeproject 中看到有人做这个, 稍微做了下修改, 做成了命令行的, 使用方法是
iesnap.exe url filename
用以抓取 URL 对于的Web, 并且将Web 的截图保存在Filename 中.
url : 要截图的网址
filename: 截图保存文件名
2. 思路
主要使用WebBrowser Control 和 MSHTML 来完成.
a. 创建WebBrowser control
b. 从WebBrowser Control 获取 IWebBrowser2 接口, 用 IWebBrowser2::Navigate2 来访问URL
c. 获得IHTMLElementRender (WebBrowser -> IHTMLDocument2 -> IHTMLElement -> IHTMLElementRender), 使用该接口的DrawToDC 来获取URL 对应的页面截图内容.
d. 用GDI 的 Image 来保存截图到Filename
3.
可以看看原文以得到更好的解答
我看的那个文章: Capture an HTML document as an image
另外一篇C# 的文章: Image Capture Whole Web Page using C#
4. 问题
a. DocumentComplete 事件会在URL 对应页面的每个元素下载完毕的时候都会发生, 所以:( 还不知道哪个事件是整个页面下载完毕的事件:/
b. 现在是通过MFC 来创建WebBrowser Control 的, 不知道怎么在Win32 Application 中创建这个控件.
c. 不知道如何得到整个页面的大小, 现在只能保存页面截图的一部分:(
这个已经知道怎么做了.
IHTMLElement2 的 scrollWidth & scrollHeight 加上 scrollLeft & scrollTop 来实现, 但是不知道为什么, put_scrollTop & put_scrollLeft 这些函数好像不对, 只能截获到一部分页面截图.:( 不知道为什么
代码可以在这里下载: http://www.cppblog.com/Files/bigsml/iesnapshot.zip