实例介绍
【实例简介】
C#抓取整个网站为一个图片
【实例截图】
截图效果如下:
【核心代码】
public partial class Form1 : Form { public Form1() { InitializeComponent(); } //******************************** public struct RECT { public int Left; public int Top; public int Right; public int Bottom; } [DllImport("gdi32")] public static extern int SelectObject(int hdc, int hObject); [DllImport("gdi32")] public static extern int CreateDC(string lpDriverName, string lpDeviceName, string lpOutput, int lpInitData); [DllImport("gdi32")] public static extern int CreateCompatibleDC(int hdc); [DllImport("gdi32")] public static extern int CreateCompatibleBitmap(int hdc, int nWidth, int nHeight); [DllImport("user32")] public static extern int GetWindow(int hwnd,int wCmd); [DllImport("user32")] public static extern int GetClassNameA(int hwnd,string lpClassName,int nMaxCount); [DllImport("user32")] private static extern int GetWindowRect(IntPtr hwnd,ref RECT lpRect); [DllImport("gdi32")] public static extern int BitBlt(int hDestDC,int x,int y,int nWidth,int nHeight,int hSrcDC,int xSrc,int ySrc,int dwRop); [DllImport("user32")] public static extern int OpenClipboard(IntPtr hwnd); [DllImport("user32")] public static extern int EmptyClipboard(); [DllImport("user32")] public static extern int SetClipboardData(int wFormat,int hMem); [DllImport("user32")] public static extern int CloseClipboard(); int DestDC; int SourceDC; int Bhandle; IntPtr winpoint; RECT Rectangles; bool flag = false; //******************************* private void toolStripButton4_Click(object sender, EventArgs e) { Application.Exit(); } private void toolStripButton3_Click(object sender, EventArgs e) { System.Diagnostics.Process.Start("http://www.mingribook.com"); } private Uri getUrl(string address) { string tempaddress = address; if ((!address.StartsWith("http://")) && (!address.StartsWith("https://")) && (!address.StartsWith("ftp://"))) { tempaddress = "http://" address; } Uri myurl; try { myurl = new Uri(tempaddress); } catch { myurl = new Uri("about:blank"); } return myurl; } private void toolStripButton1_Click(object sender, EventArgs e) { string strUrl = tstbURL.Text.Trim(); webBrowser1.Navigate(getUrl(strUrl)); tstbURL.Text =Convert.ToString(getUrl(strUrl)); tsslStatus.Text = tstbURL.Text; flag = true; } private void tstbURL_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { toolStripButton1_Click(sender, e); } } private void inputHide() { toolStrip1.Focus(); } private void Snapweb() { this.TopMost = true; SelectObject(DestDC, Bhandle); int linewidth=0; int lineheight=0; int i=0; int j=0; winpoint = webBrowser1.Handle; GetWindowRect(winpoint,ref Rectangles); webBrowser1.Document.Body.ScrollTop = 0; while (lineheight < webBrowser1.Document.Body.ScrollRectangle.Height - 199) { if (webBrowser1.Document.Body.ScrollTop == 0) { inputHide(); BitBlt(DestDC, 0, 0, webBrowser1.Document.Body.ClientRectangle.Width, webBrowser1.Document.Body.ClientRectangle.Height, SourceDC, Rectangles.Left, Rectangles.Top, 13369376);//获取可见区域场景 linewidth = webBrowser1.Document.Body.ClientRectangle.Width 5; //赋值宽 if (linewidth < webBrowser1.Document.Body.ScrollRectangle.Width) { while (linewidth < webBrowser1.Document.Body.ScrollRectangle.Width - 199) { inputHide(); webBrowser1.Document.Body.ScrollLeft = 199; BitBlt(DestDC, webBrowser1.Document.Body.ClientRectangle.Width 199 * j, 0, 199, webBrowser1.Document.Body.ClientRectangle.Height, SourceDC, Rectangles.Left webBrowser1.Document.Body.ClientRectangle.Width - 199, Rectangles.Top, 13369376); linewidth = linewidth 199; j = j 1; } if (linewidth >= webBrowser1.Document.Body.ScrollRectangle.Width - 199) { inputHide(); webBrowser1.Document.Body.ScrollLeft = 199; BitBlt(DestDC, webBrowser1.Document.Body.ClientRectangle.Width 199 * j, 0, webBrowser1.Document.Body.ScrollRectangle.Width - linewidth, webBrowser1.Document.Body.ClientRectangle.Height, SourceDC, Rectangles.Left webBrowser1.Document.Body.ClientRectangle.Width - (webBrowser1.Document.Body.ScrollRectangle.Width - linewidth), Rectangles.Top, 13369376); webBrowser1.Document.Body.ScrollLeft= 0; j = 0; } } lineheight = lineheight webBrowser1.Document.Body.ClientRectangle.Height; } else { inputHide(); BitBlt(DestDC, 0, webBrowser1.Document.Body.ClientRectangle.Height 199 * i, webBrowser1.Document.Body.ClientRectangle.Width, 199, SourceDC, Rectangles.Left, Rectangles.Top webBrowser1.Document.Body.ClientRectangle.Height - 199, 13369376);//获取可见区域场景 linewidth = webBrowser1.Document.Body.ClientRectangle.Width;//当前宽度 if (linewidth < webBrowser1.Document.Body.ScrollRectangle.Width) { while (linewidth < webBrowser1.Document.Body.ScrollRectangle.Width-199) { inputHide(); webBrowser1.Document.Body.ScrollLeft = 199; BitBlt(DestDC, webBrowser1.Document.Body.ClientRectangle.Width 199 * j, webBrowser1.Document.Body.ClientRectangle.Height 199 * i, webBrowser1.Document.Body.ClientRectangle.Width, 199, SourceDC, Rectangles.Left webBrowser1.Document.Body.ClientRectangle.Width - 199, Rectangles.Top webBrowser1.Document.Body.ClientRectangle.Height - 199, 13369376); linewidth = linewidth 199; j = j 1; } if(linewidth >=webBrowser1.Document.Body.ScrollRectangle.Width-199) { inputHide(); webBrowser1.Document.Body.ScrollLeft =199; BitBlt(DestDC, webBrowser1.Document.Body.ClientRectangle.Width 199 * j, webBrowser1.Document.Body.ClientRectangle.Height 199 * i, webBrowser1.Document.Body.ScrollRectangle.Width - linewidth, 199, SourceDC, Rectangles.Left webBrowser1.Document.Body.ClientRectangle.Width - (webBrowser1.Document.Body.ScrollRectangle.Width - linewidth), Rectangles.Top webBrowser1.Document.Body.ClientRectangle.Height - 199, 13369376); webBrowser1.Document.Body.ScrollLeft=0; j = 0; } } i = i 1;//纵向计数器累计 lineheight = lineheight 199; } webBrowser1.Document.Body.ScrollTop =199;//调整纵向滚动条位置 } if (lineheight >= webBrowser1.Document.Body.ScrollRectangle.Height - 199) { inputHide(); BitBlt(DestDC, 0, webBrowser1.Document.Body.ClientRectangle.Height 199 * i, webBrowser1.Document.Body.ClientRectangle.Width, (webBrowser1.Document.Body.ScrollRectangle.Height - lineheight), SourceDC, Rectangles.Left, Rectangles.Top webBrowser1.Document.Body.ClientRectangle.Height - (webBrowser1.Document.Body.ScrollRectangle.Height - lineheight), 13369376); linewidth = webBrowser1.Document.Body.ClientRectangle.Width; if(linewidth < webBrowser1.Document.Body.ScrollRectangle.Width) { while(linewidth<webBrowser1.Document.Body.ScrollRectangle.Width-199) { inputHide(); webBrowser1.Document.Body.ScrollLeft =199; BitBlt(DestDC, webBrowser1.Document.Body.ClientRectangle.Width 199 * j, webBrowser1.Document.Body.ClientRectangle.Height 199 * i, webBrowser1.Document.Body.ClientRectangle.Width, (webBrowser1.Document.Body.ScrollRectangle.Height - lineheight), SourceDC, Rectangles.Left webBrowser1.Document.Body.ClientRectangle.Width - 199, Rectangles.Top webBrowser1.Document.Body.ClientRectangle.Height - (webBrowser1.Document.Body.ScrollRectangle.Height - lineheight), 13369376); linewidth = linewidth 199; j = j 1; } if(linewidth >=webBrowser1.Document.Body.ScrollRectangle.Width-199) { inputHide(); webBrowser1.Document.Body.ScrollLeft =199; BitBlt(DestDC, webBrowser1.Document.Body.ClientRectangle.Width 199 * j, webBrowser1.Document.Body.ClientRectangle.Height 199 * i, webBrowser1.Document.Body.ScrollRectangle.Width - linewidth, (webBrowser1.Document.Body.ScrollRectangle.Height - lineheight), SourceDC, Rectangles.Left webBrowser1.Document.Body.ClientRectangle.Width - (webBrowser1.Document.Body.ScrollRectangle.Width - linewidth), Rectangles.Top webBrowser1.Document.Body.ClientRectangle.Height - (webBrowser1.Document.Body.ScrollRectangle.Height - lineheight), 13369376); webBrowser1.Document.Body.ScrollLeft=0; } } i=0; OpenClipboard(this.Handle); EmptyClipboard(); SetClipboardData(2,Bhandle); CloseClipboard(); Image ig = (Image)Clipboard.GetImage(); if (saveFileDialog1.ShowDialog() == DialogResult.OK) { string path = saveFileDialog1.FileName; ig.Save(path); MessageBox.Show("保存成功","提示",MessageBoxButtons.OK,MessageBoxIcon.Exclamation); webBrowser1.Document.Body.ScrollTop = 0; ig.Dispose(); } } } private void toolStripButton2_Click(object sender, EventArgs e) { if (flag) { Snapweb(); } } private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { SourceDC = CreateDC("DISPLAY", "0", "0", 0); DestDC = CreateCompatibleDC(SourceDC); Bhandle = CreateCompatibleBitmap(SourceDC, webBrowser1.Document.Body.ScrollRectangle.Width, webBrowser1.Document.Body.ScrollRectangle.Height); } private void Form1_Load(object sender, EventArgs e) { } }
标签:
相关软件
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论