Я пытаюсь получить управление IE COM в другом процессе, собственно он:
Вот код, в котором обьект как-то нестабильно работает, а если быть точнее, то просто не загружает следующую указанную страницу, хотя если бы обьект IE был создан в одном скрипте - то все было бы нормально (пробовал очень много вариантов):
Код:
$iWidth = @DesktopWidth - 20
$iHeight = @DesktopHeight - 80
$hGUI = GUICreate(StringTrimRight(@ScriptName, 4), $iWidth, $iHeight,-1,-1, BitOR(0x00020000, 0x00C00000, 0x80000000))
$sObj = 'Shell.Explorer'
$oIE = ObjCreate($sObj)
GUICtrlCreateObj($oIE, 0, 0, $iWidth, $iHeight)
GUISetState(@SW_SHOW, $hGUI)
$oIE.navigate('about:' & $sObj)
While 1
Sleep(1000)
WEnd
Вот код, в котором обьект как-то нестабильно работает, а если быть точнее, то просто не загружает следующую указанную страницу, хотя если бы обьект IE был создан в одном скрипте - то все было бы нормально (пробовал очень много вариантов):
Код:
#include <ie.au3>
Local $iPID = Run('Shell.Explorer.exe')
Local $hWnd, $hControlIE, $oIE = 0
Do
Sleep(50)
$hWnd = __WinGetHWND($iPID, 'Shell.Explorer')
If $hWnd <> 0 Then
$hControlIE = ControlGetHandle($hWnd, "", "Internet Explorer_Server1")
If $hControlIE <> 0 Then $oIE = __IEControlGetObjFromHWND($hControlIE)
EndIf
Until IsObj($oIE)
If IsObj($oIE) Then
$RTR = TimerInit()
_IENavigate($oIE, 'http://fishki.net', 0)
MsgBox(16, '', 'Страница загружается..')
_IENavigate($oIE, 'http://2ip.ru', 0)
MsgBox(16, '', '2IP уже не загружается, но есл бы все было в одном скрипте - то загружалась бы теперь она!')
While 1
;$hWnd = __WinGetHWND($iPID, 'Shell.Explorer')
;If $hWnd <> 0 Then
;$hControlIE = ControlGetHandle($hWnd, "", "Internet Explorer_Server1")
$oIE = __IEControlGetObjFromHWND($hControlIE)
;EndIf
ConsoleWrite('readyState: ' & $oIE.document.readystate & @CRLF)
Sleep(1000)
WEnd
ConsoleWrite('Время затраченное: ' & (TimerDiff($RTR) / 1000) & @CRLF)
EndIf
ProcessClose($iPID)
Func __WinGetHWND($iPID, $sTitle)
If IsString($iPID) Then $iPID = ProcessExists($iPID)
Local $aList = WinList(), $i
For $i = 1 To $aList[0][0]
If StringInStr($aList[$i][0], $sTitle) Then
If WinGetProcess($aList[$i][1]) = $iPID Then
Return $aList[$i][1]
EndIf
EndIf
Next
Return 0
EndFunc ;==>__WinGetHWND