Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] ObjGet находит объект экселя, но не находит объект IE, почему? (http://forum.oszone.net/showthread.php?t=182986)

evg64 15-08-2010 11:49 1474044

ObjGet находит объект экселя, но не находит объект IE, почему?
 
Сабж, для иллюстрации маленький примерчик:
Код:

$oExcel = ObjGet("","Excel.Application")
$oIE = ObjGet("","InternetExplorer.Application")
msgbox(0,0,"IsObj($oExcel)=" & IsObj($oExcel) & @CRLF & "IsObj($oIE)=" & IsObj($oIE))

Разумеется, и книга экселя, и окна IE на момент исполнения скрипта запущены.

Iska 15-08-2010 13:31 1474113

evg64, начиная с IE5, сие невозможно по причинам применяемой в IE модели безопасности. В принципе, можно попробовать пристыковаться к существующему экземпляру IE, перебрав коллекцию окон Проводника (на XP и IE6 такое работает):
Код:

AutoItSetOption("MustDeclareVars", 1)

Local $oShell = ObjCreate("Shell.Application")
Local $oShellWindows = $oShell.Windows
Local $i, $oWindow, $oIE

If $oShellWindows.Count > 0 Then
    For $i = 0 To $oShellWindows.Count - 1
        $oWindow = $oShellWindows.Item($i)
       
        ; Для отладки:
        ConsoleWriteError(($i + 1) & " [" & ObjName($oWindow.Application.Document) & "]" & @CRLF)
       
        If ObjName($oWindow.Application.Document) = "DispHTMLDocument" Then
            $oIE = $oWindow.Application
           
            ; После первого же найденного окна IE — выходим из цикла
            ExitLoop
        EndIf
    Next
   
    If IsObj($oIE) Then
        ConsoleWrite($oIE.Document.Title & " [" & $oIE.Document.URL & "]" & @CRLF)
    EndIf
EndIf

; …

Exit(0)

Результат…
Код:

Яндекс [http://www.ya.ru/]
1 [IShellFolderViewDual2]
2 [DispHTMLDocument]

На VBScript вместо «DispHTMLDocument» возвращается «HTMLDocument»

evg64 21-08-2010 14:22 1478590

Спасибо! Я разобрался :)


Время: 15:30.

Время: 15:30.
© OSzone.net 2001-