我制作了两个文件(a.au3
和b.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。
答案 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