在两个不同的窗口中打开两个具有相同代码的文件

时间:2017-03-17 11:26:29

标签: internet-explorer bots autoit

我制作了两个文件(a.au3b.au3)。两者都包含相同的代码:

#include <IE.au3>
#include <MsgBoxConstants.au3>

Global $myUrl = "https://www.autoitscript.com"
RegWrite('HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main','SessionMerging','REG_DWORD','00000000')
ShellExecute ("iexplore.exe", " -nosessionmerging about:blank")
WinWait ("Blank Page")
Global $oIE = _IEAttach ("about:blank", "url")
_IELoadWait ($oIE)
_IENavigate ($oIE, $myUrl)

当我同时启动两个文件时,会打开两个空白的Internet Explorer窗口。

我想要的是每个窗口都导航到链接。但是会发生的是第一个和第二个文件将URL导航到同一个窗口。所以第二个窗口保持在about:blank。我认为这是因为我尝试在两个窗口中打开相同的URL。

所以我需要一种方法从两个不同的窗口导航到相同的URL。我不想使用_IECreate(),因为我已使用ShellExecute()解决了the problem of session merging between windows

1 个答案:

答案 0 :(得分:0)

使用_IEAttach()时,通过句柄而不是标题文本来定位窗口(未经测试,无错误检查):

#include <WinAPIProc.au3>
#include <IE.au3>

Global $g_aUrl[2]
       $g_aUrl[0] = 'https://stackoverflow.com/'
       $g_aUrl[1] = 'https://www.autoitscript.com/'
Global $g_aIE[UBound($g_aUrl, 1)]

For $i1 = 0 To UBound($g_aUrl, 1) -1    
    _IECreateSession($g_aIE[$i1], $g_aUrl[$i1])    
Next

Func _IECreateSession(ByRef $oIE, Const $sUrl)
    Local Const $iPID = ShellExecute('iexplore.exe', '-nosessionmerging about:blank')
    Local       $aWnd

    WinWait('Blank Page')

    $aWnd = _WinAPI_EnumProcessWindows($iPID, True)
    $oIE  = _IEAttach($aWnd[1][1], 'hwnd')

    _IELoadWait($oIE)
    _IENavigate($oIE, $sUrl)

    Return $iPID    
EndFunc

从指定进程的主窗口(最新的IE实例)中检索句柄。 Related