如果我运行以下代码:

local $oBrowser = _IECreate("www.mywebsite.com")
local $oHTMLWindow = _IEAttach("Text In Title", "embedded")

我得到两种不同的行为(取决于Internet Explorer的保护模式配置)。
  • 保护模式已关闭-_IECreate()(内部是_IENavigate())创建2个iexplore.exe进程(一个是容器,另一个是运行选项卡)。然后,我可以在$oHTMLWindow变量上获取该句柄。
  • 保护模式开启-_IECreate()(其后是_IENavigate())创建3个iexplore.exe进程。完整性低的原因之一(这是预期的保护模式部分)。问题是此过程随后失败。

  • 完整性级别机制是否阻止了我进行处理?我该如何解决?

    最佳答案

    尝试获取Intranet站点时遇到了类似的问题,因为它们似乎要在不同的ie进程中打开,而原始过程的句柄似乎迷路了。我的解决方法是在网站网址的末尾附加一个随机字符串(并希望服务器对此不关心),然后尝试使用相同的随机网址附加到Internet Explorer窗口。这有点丑陋,但似乎可以为我持续工作。

    #include <File.au3>
    #include <IE.au3>
    
    $url = 'https://www.mywebsite.com/'
    ; using a random string to ensure that we will attach to the IE instance that we created and not some other random one
    $randomstring = StringTrimLeft(_TempFile('.','',''),2)
    $randomurl = $url & '?' & $randomstring
    
    _IECreate($randomurl)
    
    $timer = TimerInit()
    Do
        if TimerDiff($timer)/1000 >= 10 then
            ConsoleWrite('timeout' & @CRLF)
            Exitloop
        EndIf
        sleep(10)
        $oBrowser = _IEAttach($randomurl, 'URL')
    Until @error<>7
    
    $ie_hwnd=_IEPropertyGet($oBrowser, "hwnd")
    ConsoleWrite($ie_hwnd & @CRLF)
    

    另一个选择是,如果您可以使用,请以admin身份运行自动脚本,并在顶部使用#RequireAdmin。

    10-02 21:44