Как получить объектную модель IE?

Программирование на Active Server Pages и VBScript.
Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Как получить объектную модель IE?

Сообщение Ruslan Demidow » 27.06.2005 (Пн) 15:06

Возникла задача: есть запущенный IE (предположим несколько окон).
Необходимо обновить страницы в каждом окне IE используя vb-script.
Мой подход к решению: через WMI получаем список процессов интернет експлорера. Получаем PID процесса. Теперь через Shell можем активировать приложение и посылать ему (через SendKeys) клавиатурные сочетания. Напирмер то же "обновить" (F5). Но возникает одно но: все окна принадлежат одному процессу (независимо от количества окон - процесс в памяти висит только один). Соответственно и PID - тоже один. И если мы активируем приложение через Shell - то акивируется только одно окно. Мне же нужно перебрать все окна. Но через Shell я этого сделать не могу.
Поэтому напрашивается вопрос: как, имея PID процесса получить объектную модель IE? Что бы можно было через эту модель обойти все окна и выполнить все необходимые действия? Если же подключаться к запущенному IE через ConnectObject - то я получаю доступ только к событиям IE. Мне же нужно получить доступ и к методам.

Привожу скрипт:
Код: Выделить всё

Option Explicit
dim  WMI
dim  SQuery
dim  Processes
dim  Process
dim  WshShell
Dim Result
Dim IE, IePID, obIE, IEprocess
Dim WShell


Set WShell=CreateObject("Wscript.Shell")
getieprocessid
If IePID=vbnullstring Then
   WScript.Echo "Процесс IE не найден."
   WScript.Quit(1)
Else
   WShell.AppActivate IePID
   WScript.Sleep(1000)
   WShell.SendKeys "{TAB}www.r-demidow.front.ru{ENTER}"
End If

WScript.Quit(0)

sub GetIEProcessID()
   'Соединяемся с WMI
   set  WMI=GetObject("winMgmts:")
   'Формируем текст запроса 
   SQuery="SELECT * FROM Win32_Process"
   'Создаем коллекцию-результат запроса
   set Processes=WMI.ExecQuery(SQuery)
 
   If Processes.count=0 Then
      IEePID=-1
   Else
      For Each Process In Processes
         If ucase(Process.name)=UCase("iexplore.exe") Then
            IEPID=Process.Handle
            set IEprocess=Process
            Exit For
         End If
      Next
   End If
End sub


В IEprocess я получаю объект процесса. Как мне имея этот объект получить объектную модель?
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 27.06.2005 (Пн) 15:48

-у клиента, это по безопасности врятли пройдёт...(тема ASP я правильно понял?)
-окна могут хостится в любом ехе

Если скрипт работает не из ИЕ то нужно получить коллекцию ShellWindows и пробежаться по ней, и то в 98 не все окна ИЕ ловятся...

и в ХП кстати тоже(((
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 27.06.2005 (Пн) 20:56

Sebas писал(а):-у клиента, это по безопасности врятли пройдёт...(тема ASP я правильно понял?)
-окна могут хостится в любом ехе

Если скрипт работает не из ИЕ то нужно получить коллекцию ShellWindows и пробежаться по ней, и то в 98 не все окна ИЕ ловятся...

и в ХП кстати тоже(((

Мне нужно не на ASP, а на чистом vb-script (со всеми отсюда вытекающими).
Вот кстати ещё одна идея проскочила: может быть имеет смысл из скрипта создать мини-HTML-страницу, которая будет содержать тело скрипта на vbs, а уже из страницы и обновлять все окна: ведь тогда уже будет доступна объектная модель? Или нет?...
Это Ж-ж-ж-ж неспроста (с) Винни-Пух


Вернуться в ASP и VBScript

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 44

    TopList