文章出處

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.Runtime.InteropServices;
using System.Runtime.CompilerServices;
namespace WindowsFormsApplication1
{
 public partial class Form1 : Form
 {
 public Form1()
 {
 InitializeComponent();
 MyWebBrowser1.WBDocHostShowUIShowMessage += new MyWebBrowser.DocHostShowUIShowMessageEventHandler(MyWebBrowser1_WBDocHostShowUIShowMessage);
 }
 MyWebBrowser MyWebBrowser1 = new MyWebBrowser();
 private void Form1_Load(object sender, EventArgs e)
 {
 this.Controls.Add(MyWebBrowser1);
 MyWebBrowser1.Visible = true;
 MyWebBrowser1.Navigate("about:blank");
 MyWebBrowser1.Document.Write("<mce:script type="text/<a href="http://lib.csdn.net/base/javascript" class='replace_word' title="JavaScript知識庫" target='_blank' style='color:#df3434; font-weight:bold;'>JavaScript</a>"><!--
alert('我就是確定按鈕啊')
// --></mce:script>");
 }
 void MyWebBrowser1_WBDocHostShowUIShowMessage(object sender, ExtendedBrowserMessageEventArgs e)
 {
 e.Cancel = true;//屏蔽彈出,自行處理
 if (MessageBox.Show("是否要屏蔽Alert對話框", "提示", MessageBoxButtons.YesNo) == DialogResult.No)
 {
 MessageBox.Show(e.Text, e.Caption);
 }
 }
 }
 public class MyWebBrowser : WebBrowser
 {
 //委托、事件
 public delegate void DocHostShowUIShowMessageEventHandler(object sender, ExtendedBrowserMessageEventArgs e);
 public event DocHostShowUIShowMessageEventHandler WBDocHostShowUIShowMessage = null;
 
 #region ExtendedWebBrowserSite
 class ExtendedWebBrowserSite : WebBrowser.WebBrowserSite, UnsafeNativeMethods.IDocHostShowUI
 {
 private MyWebBrowser _Browser;
 public ExtendedWebBrowserSite(MyWebBrowser host)
 : base(host)
 {
 _Browser = host;
 }
 int UnsafeNativeMethods.IDocHostShowUI.ShowMessage(IntPtr hwnd, string lpstrText,
 string lpstrCaption, uint dwType,
 string lpstrHelpFile, uint dwHelpContext, ref int lpResult) 
 {
 int iRet = 1; //Hresults.S_FALSE
 if (_Browser.WBDocHostShowUIShowMessage != null)
 {
 ExtendedBrowserMessageEventArgs args = new ExtendedBrowserMessageEventArgs(hwnd, lpstrText, lpstrCaption, dwType, lpstrHelpFile, dwHelpContext);
 _Browser.WBDocHostShowUIShowMessage(this, args);
 if (args.Cancel == true)
 {
 
 iRet = 0;//Hresults.S_OK; 
 lpResult = args.pResult;
 }
 }
 return iRet;
 }
 int UnsafeNativeMethods.IDocHostShowUI.ShowHelp(IntPtr hwnd, string pszHelpFile, uint uCommand, uint dwData, UnsafeNativeMethods.tagPOINT ptMouse, object pDispatchObjectHit)
 {
 return unchecked((int)0x80004001);//Hresults.E_NOTIMPL
 }
 }
 protected override WebBrowserSiteBase CreateWebBrowserSiteBase()
 {
 return new ExtendedWebBrowserSite(this);
 }
 #endregion
 }
 public class UnsafeNativeMethods
 {
 #region IDocHostShowUI
 [StructLayout(LayoutKind.Explicit, Pack = 4)]
 public struct __MIDL_IWinTypes_0009
 {
 // Fields 
 [FieldOffset(0)]
 public int hInproc;
 [FieldOffset(0)]
 public int hRemote;
 }
 [StructLayout(LayoutKind.Sequential, Pack = 4)]
 public struct _RemotableHandle
 {
 public int fContext;
 public __MIDL_IWinTypes_0009 u;
 }
 [StructLayout(LayoutKind.Sequential, Pack = 4)]
 public struct tagPOINT
 {
 public int x;
 public int y;
 }
 [ComImport, ComVisible(true)]
 [Guid("C4D244B0-D43E-11CF-893B-00AA00BDCE1A")]
 [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
 public interface IDocHostShowUI
 {
 [return: MarshalAs(UnmanagedType.I4)]
 [PreserveSig]
 int ShowMessage(
 IntPtr hwnd,
 [MarshalAs(UnmanagedType.LPWStr)] string lpstrText,
 [MarshalAs(UnmanagedType.LPWStr)] string lpstrCaption,
 [MarshalAs(UnmanagedType.U4)] uint dwType,
 [MarshalAs(UnmanagedType.LPWStr)] string lpstrHelpFile,
 [MarshalAs(UnmanagedType.U4)] uint dwHelpContext,
 [In, Out] ref int lpResult);
 [return: MarshalAs(UnmanagedType.I4)]
 [PreserveSig]
 int ShowHelp(
 IntPtr hwnd,
 [MarshalAs(UnmanagedType.LPWStr)] string pszHelpFile,
 [MarshalAs(UnmanagedType.U4)] uint uCommand,
 [MarshalAs(UnmanagedType.U4)] uint dwData,
 [In, MarshalAs(UnmanagedType.Struct)] tagPOINT ptMouse,
 [Out, MarshalAs(UnmanagedType.IDispatch)] object pDispatchObjectHit);
 } 
 #endregion
 }
 #region ExtendedBrowserMessageEventArgs
 public class ExtendedBrowserMessageEventArgs : CancelEventArgs
 {
 private int _plResult;
 public int pResult
 {
 get { return _plResult; }
 }
 public System.Windows.Forms.DialogResult DlgResult
 {
 set { _plResult = (int)value; }
 }
 private IntPtr _hwnd;
 public IntPtr hwnd
 {
 get { return _hwnd; }
 }
 private string _lpstrText;
 public string Text
 {
 get { return _lpstrText; }
 }
 private string _lpstrCaption;
 public string Caption
 {
 get { return _lpstrCaption; }
 }
 private uint _dwType;
 public System.Windows.Forms.MessageBoxButtons DlgButtons
 {
 get
 {
 switch (_dwType & (int)MsgBoxButton.MASK)
 {
 case (int)MsgBoxButton.MB_OKCANCEL:
 return System.Windows.Forms.MessageBoxButtons.OKCancel;
 case (int)MsgBoxButton.MB_ABORTRETRYIGNORE:
 return System.Windows.Forms.MessageBoxButtons.AbortRetryIgnore;
 case (int)MsgBoxButton.MB_YESNOCANCEL:
 return System.Windows.Forms.MessageBoxButtons.YesNoCancel;
 case (int)MsgBoxButton.MB_YESNO:
 return System.Windows.Forms.MessageBoxButtons.YesNo;
 case (int)MsgBoxButton.MB_RETRYCANCEL:
 return System.Windows.Forms.MessageBoxButtons.RetryCancel;
 case (int)MsgBoxButton.MB_OK:
 default:
 return System.Windows.Forms.MessageBoxButtons.OK;
 }
 }
 }
 public System.Windows.Forms.MessageBoxIcon DlgIcon
 {
 get
 {
 switch (_dwType & (int)MsgBoxIcon.MASK)
 {
 case (int)MsgBoxIcon.MB_ICONHAND:
 return System.Windows.Forms.MessageBoxIcon.Hand;
 case (int)MsgBoxIcon.MB_ICONQUESTION:
 return System.Windows.Forms.MessageBoxIcon.Question;
 case (int)MsgBoxIcon.MB_ICONEXCLAMATION:
 return System.Windows.Forms.MessageBoxIcon.Exclamation; 
 case (int)MsgBoxIcon.MB_ICONASTERISK:
 return System.Windows.Forms.MessageBoxIcon.Asterisk;
 case (int)MsgBoxIcon.MB_ICONNONE:
 case (int)MsgBoxIcon.MB_USERICON:
 default:
 return System.Windows.Forms.MessageBoxIcon.None;
 }
 }
 }
 public System.Windows.Forms.MessageBoxDefaultButton DlgDefaultButtons
 {
 get
 {
 switch (_dwType & (int)MsgBoxDefButton.MASK)
 {
 case (int)MsgBoxDefButton.MB_DEFBUTTON2:
 return System.Windows.Forms.MessageBoxDefaultButton.Button2;
 case (int)MsgBoxDefButton.MB_DEFBUTTON3:
 return System.Windows.Forms.MessageBoxDefaultButton.Button3;
 case (int)MsgBoxDefButton.MB_DEFBUTTON1:
 default:
 return System.Windows.Forms.MessageBoxDefaultButton.Button1;
 }
 }
 }
 public System.Windows.Forms.MessageBoxOptions DlgOptions
 {
 get
 {
 switch (_dwType & (int)MsgBoxOption.MASK)
 {
 case (int)MsgBoxOption.MB_DEFAULT_DESKTOP_ONLY:
 return System.Windows.Forms.MessageBoxOptions.DefaultDesktopOnly;
 case (int)MsgBoxOption.MB_RIGHT:
 return System.Windows.Forms.MessageBoxOptions.RightAlign;
 case (int)MsgBoxOption.MB_RTLREADING:
 return System.Windows.Forms.MessageBoxOptions.RtlReading;
 case (int)MsgBoxOption.MB_SERVICE_NOTIFICATION1:
 case (int)MsgBoxOption.MB_SERVICE_NOTIFICATION2:
 return System.Windows.Forms.MessageBoxOptions.ServiceNotification;
 default:
 return 0;
 }
 }
 }
 public bool displayHelpButton
 {
 get { return (_dwType & (int)MsgBoxHelpButton.MASK) == (int)MsgBoxHelpButton.MB_HELP; }
 }
 private string _lpstrHelpFile;
 public string lpstrHelpFile
 {
 get { return _lpstrHelpFile; }
 }
 private uint _dwHelpContext;
 public uint dwHelpContext
 {
 get { return _dwHelpContext; }
 }
 public ExtendedBrowserMessageEventArgs(IntPtr Hwnd, string LpstrText, string LpstrCaption, uint DwType, string LpstrHelpFile, uint DwHelpContext)
 : base()
 {
 this._hwnd = Hwnd;
 _lpstrText = LpstrText;
 _lpstrCaption = LpstrCaption;
 _dwType = DwType;
 _lpstrHelpFile = LpstrHelpFile;
 _dwHelpContext = DwHelpContext;
 switch (DlgButtons)
 {
 case System.Windows.Forms.MessageBoxButtons.OKCancel:
 case System.Windows.Forms.MessageBoxButtons.RetryCancel:
 case System.Windows.Forms.MessageBoxButtons.YesNoCancel:
 DlgResult = System.Windows.Forms.DialogResult.Cancel;
 break;
 case System.Windows.Forms.MessageBoxButtons.YesNo:
 DlgResult = System.Windows.Forms.DialogResult.No;
 break;
 case System.Windows.Forms.MessageBoxButtons.AbortRetryIgnore:
 DlgResult = System.Windows.Forms.DialogResult.Abort;
 break;
 case System.Windows.Forms.MessageBoxButtons.OK:
 default:
 DlgResult = System.Windows.Forms.DialogResult.OK;
 break;
 }
 }
 }
 public enum MsgBoxButton
 {
 MASK = 0x0000000F,
 MB_OK = 0x00000000,
 MB_OKCANCEL = 0x00000001,
 MB_ABORTRETRYIGNORE = 0x00000002,
 MB_YESNOCANCEL = 0x00000003,
 MB_YESNO = 0x00000004,
 MB_RETRYCANCEL = 0x00000005
 }
 public enum MsgBoxIcon
 {
 MASK = 0x000000F0,
 MB_ICONNONE = 0x00000000,
 MB_ICONHAND = 0x00000010,
 MB_ICONSTOP = 0x00000010,
 MB_ICONERROR = 0x00000010,
 MB_ICONQUESTION = 0x00000020,
 MB_ICONEXCLAMATION = 0x00000030,
 MB_ICONWARNING = 0x00000030,
 MB_ICONASTERISK = 0x00000040,
 MB_ICONINFORMATION = 0x00000040,
 MB_USERICON = 0x00000080
 }
 public enum MsgBoxDefButton
 {
 MASK = 0x00000F00,
 MB_DEFBUTTON1 = 0x00000000,
 MB_DEFBUTTON2 = 0x00000100,
 MB_DEFBUTTON3 = 0x00000200
 }
 public enum MsgBoxOption
 {
 MASK = 0x003F0000,
 MB_DEFAULT_DESKTOP_ONLY = 0x00020000,
 MB_RIGHT = 0x00080000,
 MB_RTLREADING = 0x00100000,
 MB_SERVICE_NOTIFICATION1 = 0x00200000,
 MB_SERVICE_NOTIFICATION2 = 0x00040000
 }
 public enum MsgBoxHelpButton
 {
 MASK = 0x00004000,
 MB_HELP = 0x00004000
 }
 #endregion 
}

v


文章列表


不含病毒。www.avast.com
文章標籤
全站熱搜
創作者介紹
創作者 大師兄 的頭像
大師兄

IT工程師數位筆記本

大師兄 發表在 痞客邦 留言(0) 人氣(1)