ControlGetHandle() 和 Internet Explorer 的保护模式

3
如果我运行以下代码:
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进程。其中一个是低完整性级别的(这是预期的受保护模式部分)。问题是此进程随后失败。

这是否是完整性级别机制阻止我获取句柄?我该如何解决它?

1个回答

0

我曾经遇到过类似的问题,尝试获取内部网站的句柄,因为它们似乎想要在不同的IE进程中打开,而原始进程的句柄似乎丢失了。我的解决方法是在网站URL的末尾附加一个随机字符串(希望服务器不会介意),然后尝试使用相同的随机URL附加到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)

另一个选择是在您的AutoIt脚本顶部加上#RequireAdmin,并以管理员身份运行脚本,如果这对您有用的话。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接