VB.NET SHDocVw.InternetExplorer:Windows安全弹出窗口

VB.NET SHDocVw.InternetExplorer:Windows安全弹出窗口,vb.net,popup,shdocvw,shdocvw.internetexplorer,Vb.net,Popup,Shdocvw,Shdocvw.internetexplorer,您好,我正在使用Internet Explorer headless模式对脚本执行自动任务,但我遇到了一个问题,有时在某些页面上冲浪时,会出现身份验证弹出窗口,以登录页面,但不是通过HTML弹出窗口,而是通过windows弹出窗口 我想控制弹出窗口,这样当它弹出时,它就会显示在顶部。现在它是非常随机的,它有时显示在所有程序的顶部,但有时它在后台很远,然后自动化失败,因为用户没有看到弹出窗口 硬编码用户名和密码不是一个选项 有人知道我如何操作弹出窗口(见附件中的捕获)并最终将其放在屏幕顶部吗 谢谢

您好,我正在使用Internet Explorer headless模式对脚本执行自动任务,但我遇到了一个问题,有时在某些页面上冲浪时,会出现身份验证弹出窗口,以登录页面,但不是通过HTML弹出窗口,而是通过windows弹出窗口

我想控制弹出窗口,这样当它弹出时,它就会显示在顶部。现在它是非常随机的,它有时显示在所有程序的顶部,但有时它在后台很远,然后自动化失败,因为用户没有看到弹出窗口

硬编码用户名和密码不是一个选项

有人知道我如何操作弹出窗口(见附件中的捕获)并最终将其放在屏幕顶部吗

谢谢

解决方案:

Public Sub New()

        ' This call is required by the designer.
        InitializeComponent()

        Automation.AddAutomationEventHandler(WindowPattern.WindowOpenedEvent, AutomationElement.RootElement,
           TreeScope.Subtree,
           Sub(UIElm, evt)
           Dim element As AutomationElement = TryCast(UIElm, AutomationElement)
           If element Is Nothing Then Return
              Dim NativeHandle As IntPtr = CType(element.Current.NativeWindowHandle, IntPtr)
              If InStr(element.Current.Name, "Windows Security") > 0 Then
                    AppActivate(element.Current.ProcessId)
              End If

        End Sub)
    End Sub

您可以使用UI自动化检测对话框的打开,使用
WindowPattern.WindowOpenedEvent
,从
AutomationElement.RootElement
(桌面)开始设置事件处理程序(
Automation.AddAutomationEventHandler
)。示例VB.Net代码,执行相同的操作。当您获得对话框的句柄(它在事件处理程序的
AutomationEventArgs
对象的属性中设置)时,您可以使用或将其移动到前台,由于
WindowPatter.SetWindowVisualState
方法可能无法与此类对话框一起工作。@Jimi感谢您的输入,它不容易理解,但我掌握了它的工作原理,尽管我无法实现,所以我使用了