我在Vb.Net WinForms应用程序中使用SHDocVw.InternetExplorer API来捕获我的应用程序中从IE发送的请求。
在this链接
上给出" NewWindow3事件仅在新的Internet实例时触发 资源管理器即将创建。调用showModalDialog或 showModelessDialog不会触发事件,因为它们不是新事件 Internet Explorer"
的实例
我正在尝试在Internet Explorer中自动执行用户操作以进行自动化测试。所以我想知道,由于某些用户操作,会打开模态对话框或打开一些警报窗口。
所以我的问题是:
我如何知道在Internet Explorer中打开模式对话框窗口?
在这种情况下,Internet Explorer是否还有其他事件?
如果不能直接处理这种情况会有其他方法吗?
答案 0 :(得分:1)
我唯一能找到的是提到的WindowStateChanged事件http://msdn.microsoft.com/en-us/library/aa768307(v=vs.85).aspx:
当内容的状态时引发WindowStateChanged事件 窗口(例如浏览器窗口或选项卡)可能已更改。该 以下行动引发了这一事件。
- 最小化或恢复浏览器窗口。
- 活动标签变为无效。
- 非活动标签变为活动状态。
- 由于模式对话框,启用或禁用了浏览器窗口。
这是一个VB.NET代码示例,说明如何使用WindowStateChanged事件检查启用/禁用和可见标志:
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'Code to instantiate the IE COM object'
Dim IE As New SHDocVw.InternetExplorer()
AddHandler IE.WindowStateChanged, AddressOf OnWindowStateChanged
'do stuff here'
IE.Quit()
End Sub
Public Sub OnWindowStateChanged(ByVal dwWindowStateFlags As UInteger, ByVal dwValidFlagsMask As UInteger)
Const OLECMDIDF_WINDOWSTATE_USERVISIBLE As UInteger = 1
Const OLECMDIDF_WINDOWSTATE_ENABLED As UInteger = 2
'Check if the window is disabled'
If dwValidFlagsMask And OLECMDIDF_WINDOWSTATE_ENABLED = OLECMDIDF_WINDOWSTATE_ENABLED Then
If dwWindowStateFlags And OLECMDIDF_WINDOWSTATE_ENABLED <> OLECMDIDF_WINDOWSTATE_ENABLED Then
'The browser window has been disabled.... possibly by a modal popup'
Else
'The browser is enabled.'
End If
Else
'The enabled/disabled flag has not been initialized, so we cannot check the state during this event handler execution'
End If
'Check if window is visible: '
If dwValidFlagsMask And OLECMDIDF_WINDOWSTATE_USERVISIBLE = OLECMDIDF_WINDOWSTATE_USERVISIBLE Then
If dwWindowStateFlags And OLECMDIDF_WINDOWSTATE_USERVISIBLE <> OLECMDIDF_WINDOWSTATE_USERVISIBLE Then
'The browser window is NOT visible'
Else
'The browser window is visible'
End If
Else
'The visible flag has not been initialized, so we cannot check the state during this event handler execution'
End If
End Sub
End Class
答案 1 :(得分:1)
您正在寻找的事件可能不存在,但是有很多解决方法可以检测模态是否打开。
您可以使用jquery在模态上添加/删除类:Can I check if Bootstrap Modal Shown / Hidden?
您可以查看控制台:check if jquery reveal modal is active, do something
我不建议使用控制台方法,还有更多的内容,例如控制台未打开时。
我可以想到几种方法来解决你的问题而不关心事件,但是,模式是否可以与IE页面对话,然后使用API与你的应用交谈?你可以使用show()&amp; hide()改变模态的状态,并在该状态改变时触发附加代码以执行您需要的操作。
另一个选择是将值保存到数据库并在应用程序中读取它们(显然不需要API)。
如果这些听起来都不好,或许您应该从功能的角度准确地告诉我们您要完成的任务,我们将能够构建/给您一个解决方案。
答案 2 :(得分:0)
没有这样的事件,但你可以使用其他一些方法:
您可以实现INewWindowManager界面 - 我不确切知道,但我认为它可以为您提供一些信息
你可以实现IDocHostUIHandler并使用ShowUI方法 - 但它不仅用于显示新窗口,你应该使用它