在WebBrowser中截获弹出对话框内容并将其屏蔽
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
在WebBrowser中截获弹出对话框内容并将其屏蔽的更多相关文章
- Eclipse无法正常启动,弹出对话框内容为 A Java Runtime...
1.Eclipse无法正常启动,弹出对话框内容为 A Java Runtime...如下图: 原因分析:由于软件版本的更新或者安装其他开发软件无意之间修改了配置文件中的路径,众所周知,Java虚拟机( ...
- SharePoint 2010 Pop-Up Dialogs SharePoint 2010 弹出对话框
SharePoint 2010 Pop-Up Dialogs SharePoint 2010 弹出对话框 SharePoint 2010 使得往你的站点加入对话框内容变得出乎意料的简单 ...
- AlertDialog.Builder弹出对话框
在Android中,弹出对话框使用AlertDialog.Builder方法. new AlertDialog.Builder(MainActivity.this).setTitle("本机 ...
- Windows服务(system权限)程序显示界面与用户交互,Session0通知Session1里弹出对话框(真的很牛) good
源码资源下载:http://download.csdn.net/detail/stony1980/4512984 1.VC2008中编写“Windows服务”(Windows Service)程序 ...
- form WebBrowser自动点击弹出提示框alert、弹出对话框confirm、屏蔽弹出框、屏蔽弹出脚本错误的解决办法
针对WebBrowser控件中自动点击弹出框及禁用脚本提示问题得到如下几种实际情况的解决办法,绝对管用. 1.屏蔽弹出错误脚本 将WebBrowser控件ScriptErrorsSuppressed设 ...
- JavaScript中的三种弹出对话框
学习过js的小伙伴会发现,我们在一些实例中用到了alert()方法.prompt()方法.prompt()方法,他们都是在屏幕上弹出一个对话框,并且在上面显示括号内的内容,使用这种方法使得页面的交互性 ...
- 经验总结:WebBrowser自动点击弹出提示框alert、弹出对话框confirm、屏蔽弹出框、屏蔽弹出脚本错误的解决办法
经验总结:WebBrowser自动点击弹出提示框alert.弹出对话框confirm.屏蔽弹出框.屏蔽弹出脚本错误的解决办法 网上有好多解决方法,可是不一定好使,本人经过多次试验,针对WebBrows ...
- CGridCtrl只点击规定行中的按钮才弹出对话框
在头文件中添加: afx_msg void OnClick(NMHDR* pNMHDR, LRESULT* pResult); 添加映射:ON_NOTIFY(NM_CLICK, IDC_CUSTOM1 ...
- 10.JAVA之GUI编程弹出对话框Dialog
在上节基础上添加对话框显示错误信息. 代码如下: /*弹出对话框显示错误信息,对话框一般不单独出现,一般依赖于窗体.*/ /*练习-列出指定目录内容*/ import java.awt.Button; ...
随机推荐
- PHP数组内容不重复组合排列算法
最近在做ecshop的商品库存模块,分别给一款商品的多个属性组合设置库存,如下图: 一款手机有不同颜色,屏幕尺寸,系统和电量,都要设置不同的库存,如果都要手动选择属性组合,则会耗费很多不必要的时间.假 ...
- Error : An error occurred while creating the WebJob schedule: Response status code does not indicate success: 409 (Conflict).
How to fix the error? the answer is simple switch from Free to Standard...
- 搜索引擎Solr系列(二): Solr6.2.1 从MySql中导入数据
一:建立MySql测试表,如下图: 二:solr导入配置: 1.新建demo core文件夹,并修改managed-schema里面的配置文件建立索引字段: 2.把mysql-connector-j ...
- MonkeyTest简单实用介绍
什么是Monkeytest? monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕.滑动Trackball.按键灯操作来对设备上的程序进行压力测试,检测程序发 ...
- mysql dba系统学习(6)二进制日志binlog之二
MySQL 5.5 中对于二进制日志 (binlog) 有 3 种不同的格式可选:Mixed,Statement,Row,默认格式是 Statement.总结一下这三种格式日志的优缺点.MySQL R ...
- 使用flume-ng聚合双活Nginx日志
前不久使用Keepalived搭建了Nginx双活代理服务器,以达到一个公网IP后支持多个云主机的多个域名网站的目的.完成后又想在这双活的Nginx上有所有访问网站的日志,之前有了解过Google A ...
- 渗透日记-利用SQLMAP伪静态注入
今日找到一个网站,做下安全检测,url是这样的: 不是传统的.php结尾,所以很多人认为这个不能注入,其实伪静态也能注入的,这个url虽然做了伪静态,但是还是需要传递参数到数据库去查询的,试试能否注入 ...
- OO Design
什么是设计原则? 设计原则是基本的工具,应用这些规则可以使你的代码更加灵活.更容易维护.更容易扩展.基本原则:封装变化Encapsulate what varies.面向接口变成而不是实现 Code ...
- mvc api 返回json
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear(); }
- python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容
python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容 Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖 ...