2015-11-08 162 views
3

我遇到以下问题。如果我运行以下代码:ControlGetHandle()和Internet Explorer保护模式

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

根据IE保护模式配置,我得到两种不同的行为。

保护模式OFF - _IECreate(接着_IENavigate内部)产生2个iexplore.exe的过程 - 一个是容器,另一个正在运行的标签。然后我可以得到我的$oHTMLWindow变量的句柄。

保护模式ON - _IECreate(接着_IENavigate内部)产生3个iexplore.exe的过程 - 低完整性的一个(这是保护模式的部分如预期)。事情是,这个过程然后失败。

我的猜测是它的完整性级别机制阻止我得到句柄?我如何解决它?

任何帮助将非常感谢!

谢谢!

回答

0

我有一个类似的问题,试图获得一个内部网站点的句柄,因为他们似乎想要在一个不同的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) 

另一种方法是只要在顶部使用#RequireAdmin作为管理员运行自动脚本,如果这对您有用。