C# 如何检测winforms应用程序何时创建新窗口?
我在表单应用程序中使用webbrowser控件,我想阻止它可以创建的任何弹出/警报/提示窗口 目前,我正在实施各种方法来阻止弹出窗口,如:C# 如何检测winforms应用程序何时创建新窗口?,c#,winforms,webbrowser-control,C#,Winforms,Webbrowser Control,我在表单应用程序中使用webbrowser控件,我想阻止它可以创建的任何弹出/警报/提示窗口 目前,我正在实施各种方法来阻止弹出窗口,如: 取消创建新窗口时触发的各种事件 通过注册表更改全局IE设置以减少显示 警报和提示 使用浏览器功能控件阻止某些弹出窗口 将javascript注入每个页面以禁用可以创建新窗口的功能 通过实现IDocHostShowUI之类的东西,使用新事件扩展web浏览器控件 阻止某些弹出窗口 使用基本activeX webbrowser对象(如NewWindow2和New
- 取消创建新窗口时触发的各种事件
- 通过注册表更改全局IE设置以减少显示 警报和提示
- 使用浏览器功能控件阻止某些弹出窗口
- 将javascript注入每个页面以禁用可以创建新窗口的功能
- 通过实现IDocHostShowUI之类的东西,使用新事件扩展web浏览器控件 阻止某些弹出窗口
- 使用基本activeX webbrowser对象(如NewWindow2和NewWindow3)的“隐藏”事件
当覆盖整个表单时,当出现提示时,我确实会收到一些消息,但它们与失去焦点有关,而与实际创建的提示无关。因此,我能够检测何时创建了提示,但仍然无法阻止其创建。如果您只想关闭除当前窗口外的任何窗口,可以在timer_tick事件中使用以下代码:
private void timer1_Tick(object sender, EventArgs e)
{
for (int i = 0; i < Application.OpenForms.Count; i++)
{
Form form = Application.OpenForms[i];
if (form != this)
{
form.Close();
i--;
}
}
}
private void timer1\u勾选(对象发送方,事件参数e)
{
for(int i=0;i
如果您只想关闭除当前窗口外的任何窗口,可以在timer_tick事件中使用以下代码:
private void timer1_Tick(object sender, EventArgs e)
{
for (int i = 0; i < Application.OpenForms.Count; i++)
{
Form form = Application.OpenForms[i];
if (form != this)
{
form.Close();
i--;
}
}
}
private void timer1\u勾选(对象发送方,事件参数e)
{
for(int i=0;i
我已经有一段时间没有这样做了,所以我不回答。但是google WndProc、窗口子类化、SetWindowHookEx、SetWindowLong等等。。您需要将web浏览器WndProc回调重写为您自己制作的回调,在该回调中,您可以截取来自web浏览器控件的消息并让它们通过或阻止它们。或者,您可以废弃web浏览器控件并使用CEF(Chrome Embedded Framework),并且可能具有更好的功能@Ryios我已经尝试覆盖web浏览器的WndProc方法,但是在创建提示时我没有收到任何消息。嗯,那可能不可能。您可能希望将CEF作为替代方案。这是可能的,但是你需要做的是钩子CreateWindow,这很复杂。你需要使用c/c++来做。我已经有一段时间没有做过这些了,所以我不回答。但是google WndProc、窗口子类化、SetWindowHookEx、SetWindowLong等等。。您需要将web浏览器WndProc回调重写为您自己制作的回调,在该回调中,您可以截取来自web浏览器控件的消息并让它们通过或阻止它们。或者,您可以废弃web浏览器控件并使用CEF(Chrome Embedded Framework),并且可能具有更好的功能@Ryios我已经尝试覆盖web浏览器的WndProc方法,但是在创建提示时我没有收到任何消息。嗯,那可能不可能。您可能希望将CEF作为替代方案。这是可能的,但是你需要做的是钩子CreateWindow,这很复杂。您需要使用c/c++来完成此操作。它只关闭窗体窗口,而不关闭其他类型的窗口,如对话框。如果存在可以检测所有类型窗口的类似窗口,那就太好了。我搜索了一点,但不幸的是我找不到关闭模式对话框的方法。它只关闭窗体窗口,而不关闭其他类型的窗口,如对话框。如果存在类似的东西,可以检测所有类型的窗口,那就太好了。我搜索了一点,但不幸的是,我找不到关闭模式对话框的方法。