如果我运行以下代码:
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进程。低完整性之一(这是预期的受保护模式部分)。问题是这个过程失败了。
这是完整性级别机制阻止我获取句柄吗?我该如何解决这个问题?
答案 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运行自动脚本作为管理员。