当时为了给客户演示广告精投效果,用winform简单做了一个浏览器,访问我们内部服务器上的地址,但是浏览器地址栏显示成需要投放广告的网站如新浪等,因此用了用webbrowser,感觉对于简单的网络访问,还是挺方便的。
以下为效果图:
有tab page,前进/后退等
可以方便的添加和选择代理服务器
部分代码:
public partial class MainForm : Form
{
#region 改变代理
[DllImport("wininet.dll", SetLastError = true)]
private static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int lpdwBufferLength);
public struct Struct_INTERNET_PROXY_INFO
{
public int dwAccessType;
public IntPtr proxy;
public IntPtr proxyBypass;
};
public void RefreshIESettings(string strProxy)
{
const int INTERNET_OPTION_PROXY = 38;
const int INTERNET_OPEN_TYPE_PROXY = 3;
const int INTERNET_OPEN_TYPE_DIRECT = 1;
Struct_INTERNET_PROXY_INFO struct_IPI;
if(string.IsNullOrEmpty(strProxy) || strProxy.Trim().Length == 0)
{
strProxy = string.Empty;
struct_IPI.dwAccessType = INTERNET_OPEN_TYPE_DIRECT;
}
else
{
struct_IPI.dwAccessType = INTERNET_OPEN_TYPE_PROXY;
}
// Filling in structure
struct_IPI.proxy = Marshal.StringToHGlobalAnsi(strProxy);
struct_IPI.proxyBypass = Marshal.StringToHGlobalAnsi("local");
// Allocating memory
IntPtr intptrStruct = Marshal.AllocCoTaskMem(Marshal.SizeOf(struct_IPI));
// Converting structure to IntPtr
Marshal.StructureToPtr(struct_IPI, intptrStruct, true);
bool iReturn = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_PROXY, intptrStruct, Marshal.SizeOf(struct_IPI));
}
#endregion
//string[] proxys;
SetupForm setupForm;
public bool m_IsAgentUsed = false;
public string m_Agent = null;
public string m_Port = null;
//public bool isPopupWindowAllowed = false;
//public bool isChoiceClicked = false;
List<ExtendedWebBrowser> browserList = new List<ExtendedWebBrowser>();
public void SetAgent(bool flag, string agent, string port)
{
this.m_IsAgentUsed = flag;
this.m_Agent = agent;
this.m_Port = port;
}
public MainForm()
{
InitializeComponent();
expTabControl1.SetPageAddBtn();
// Automatically maximize the window
if (WindowState == FormWindowState.Normal)
WindowState = FormWindowState.Maximized;
// Generate a default browser in current tabpage
browserList.Add(new ExtendedWebBrowser());
browserList[browserList.Count - 1].Dock = DockStyle.Fill;
browserList[browserList.Count - 1].ScriptErrorsSuppressed = true;
browserList[browserList.Count - 1].DocumentCompleted += new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(this.webBrowser_DocumentCompleted);
//browserList[browserList.Count - 1].NewWindow += new System.ComponentModel.CancelEventHandler(this.webBrowser_NewWindow);
expTabControl1.TabPages[expTabControl1.SelectedIndex].Controls.Add(browserList[browserList.Count - 1]);
//expTabControl1.SelectedIndex = expTabControl1.TabPages.Count - 1;
// Use NewWindow2 event so that window.open can be handled
// The event only exists in AxWebBrowser
//browserList[browserList.Count - 1].Navigate("about:blank");//这句话重要,要先访问一个URL,否则ActiveXInstalce为空
//SHDocVw.WebBrowser xBrowser = browserList[browserList.Count - 1].ActiveXInstance as SHDocVw.WebBrowser;
//xBrowser.NewWindow2 += new SHDocVw.DWebBrowserEvents2_NewWindow2EventHandler(xBrowser_NewWindow2);
//xBrowser.NewWindow3 += new SHDocVw.DWebBrowserEvents2_NewWindow3EventHandler(xBrowser_NewWindow3);
browserList[browserList.Count - 1].BeforeNewWindow += new EventHandler<WebBrowserExtendedNavigatingEventArgs>(MainForm_BeforeNewWindow);
// Demo page
NavigateTo("http://www.baidu.com");
}
所有代码下载