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

Posted

技术标签:

【中文标题】VB .NET SHDocVw.InternetExplorer:Windows 安全弹出窗口【英文标题】:VB .NET SHDocVw.InternetExplorer: Windows Security popup 【发布时间】:2020-05-09 12:16:11 【问题描述】:

您好,我正在使用 Internet Explorer 无头模式在我的脚本上执行自动化任务,但我遇到了一个问题,有时在某些页面上冲浪时会出现身份验证弹出窗口,这些窗口显示为登录页面,但不是通过 html弹出窗口,但更多的是窗口弹出窗口。

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

硬编码用户名和密码不是一种选择。

有人知道我如何操纵弹出窗口(见附件中的截图)并最终至少将其放在屏幕顶部吗?

谢谢!

Windows Security Popup

【问题讨论】:

您可以使用 UI 自动化检测对话框的打开,使用 WindowPattern.WindowOpenedEvent 设置事件处理程序 (Automation.AddAutomationEventHandler),从 AutomationElement.RootElement(桌面)开始,如所述 @ 987654322@。 VB.Net 代码示例,做同样的事情,here。 当你得到Dialog的句柄(在事件处理程序的AutomationEventArgs对象的属性中设置),你可以使用SetWindowPos或SetForegroundWindow将它移到前台,因为 WindowPatter.SetWindowVisualState 方法可能无法按预期使用此类对话框。 @Jimi 感谢您的输入,虽然我无法实现SetForegroundWindow,但我明白了它是如何工作的,所以我使用了AppActivate 【参考方案1】:

解决方案:

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

【讨论】:

以上是关于VB .NET SHDocVw.InternetExplorer:Windows 安全弹出窗口的主要内容,如果未能解决你的问题,请参考以下文章

VB.Net和C#.Net有啥差异?优缺点是啥?

VB.net中如何嵌套EXCEL?

vb.net 有没有++(增1)和--(减1)运算符?

VB.NET求帮忙!...

C# 和 VB.NET 的优缺点?

VB.net 和C#.net 各有啥优缺点