天天看点

C#编程-139:制作自己的浏览器

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Runtime.InteropServices;
 
namespace WebBrowserTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //记事本需要的变量
        [DllImport("User32.dll")]
        public static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, string Iparam);
        [DllImport("User32.dll")]
        public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
        public const uint WM_SETTEXT = 0X00C;//0x00F5
 
        private void btnOpen_Click(object sender, EventArgs e)
        {
            OpenPage();
        }
        //打开网页
        void OpenPage()
        {
            if (txtAddress.Text.Length > 0)
            {
                webBrowser1.Navigate(txtAddress.Text.Trim(), false);
            }
            else
            {
                MessageBox.Show("请输入网址");
            }
        }
 
        private void webBrowser1_NewWindow(object sender, CancelEventArgs e)
        {
            e.Cancel = true;
            if (webBrowser1.Document.ActiveElement != null)
            {
                string address = webBrowser1.Document.ActiveElement.GetAttribute("href");
                webBrowser1.Navigate(address);
                txtAddress.Text = address;
            }
        }
 
        private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
        {
            if (webBrowser1.CanGoBack)
            {
                //tsWebBrowser.Items[0].Enabled = true;
                tsbBack.Enabled = true;
            }
            else
            {
                tsbBack.Enabled = false;
            }
            if (webBrowser1.CanGoForward)
            {
                tsWebBrowser.Items[1].Enabled = true;
            }
            else
            {
                tsWebBrowser.Items[1].Enabled = false;
            }
        }
 
        private void tsWebBrowser_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            try
            {
                if (e.ClickedItem.Name == "tsbBack")
                {
                    webBrowser1.GoBack();
                }
                if (e.ClickedItem.Name == "tsbForward")
                {
                    webBrowser1.GoForward();
                }
                if (e.ClickedItem.Name == "tsbRefresh")
                {
                    webBrowser1.Refresh();
                }
                if (e.ClickedItem.Name == "tsbHome")
                {
                    webBrowser1.GoHome();
                }
                if (e.ClickedItem.Name == "tsbStop")
                {
                    webBrowser1.Stop();
                }
                if (e.ClickedItem.Name == "tsbExit")
                {
                    if (MessageBox.Show("确认退出?", "退出对话框", MessageBoxButtons.OKCancel) == DialogResult.OK)
                    {
                        Application.Exit();
                    }
                }
                if (e.ClickedItem.Name == "tsbViewSource")
                {
  WebRequest wrq = WebRequest.Create(txtAddress.Text);
                    WebResponse wrs = wrq.GetResponse();
                    StreamReader sr = new StreamReader(wrs.GetResponseStream(), Encoding.Default);
                    string page = "";
                    string code = null;
                    while ((code = sr.ReadLine()) != null)
                    {
                        page += code;
                    }
 
                    System.Diagnostics.Process pro = new System.Diagnostics.Process();
                    pro.StartInfo.UseShellExecute = false;
                    pro.StartInfo.FileName = "notepad.exe";//获取要启动的记事本
 
                    //不适用操作系统外壳启动程序进程
                    pro.StartInfo.RedirectStandardInput = true;//读取
                    pro.StartInfo.RedirectStandardOutput = true;//将应用程序写入到流中
                    pro.Start();//启动
                    if (pro != null)
                    {
                        //调用API,传递数据
                        while (pro.MainWindowHandle == IntPtr.Zero)
                        {
                            pro.Refresh();
                        }
                        IntPtr vHandle = FindWindowEx(pro.MainWindowHandle, IntPtr.Zero, "Edit", null);
                        //传递数据给记事本
                        SendMessage(vHandle, WM_SETTEXT, 0, page);
                    }
 
                }
            }
            catch (Exception ex)
            {
 
                MessageBox.Show(ex.Message);
            }
        }
        private void txtAddress_KeyPress(object sender, KeyPressEventArgs e)
        {
            char key = e.KeyChar;
            if (key == 13)//回车
            {
                OpenPage();
            }
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            txtAddress.Text = @"http://www.baidu.com";
            OpenPage();
        }
    }
}