ControlGetHandle()和Internet Explorer的保护模式

时间:2015-11-08 21:09:37

标签: internet-explorer autoit

如果我运行以下代码:

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 :(得分: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)

另一种选择是,如果这对您有用,只需在顶部以#RequireAdmin运行自动脚本作为管理员。