Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WSH: отображение формы через IE 
V
    Опции темы
Ciber SLasH
Дата 8.3.2014, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

Репутация: нет
Всего: 67



Приветствую всех!
Подходящей ветки не нашёл. Вопрос про VBScript + WSH.
Хочу сделать вывод формы из VBScript-а через процедуру, которая создаёт для этого объект IE.
Пишу такой код:
Код

Option Explicit
Dim IEObj
Dim IEQuitFlag
Dim Path
Path = WScript.Arguments(0)
'-------------------------------------------------------------------------------
Call ShowForm(Replace(ScanFolder(Path), vbNewLine, "<br/>"))

WScript.Quit(0)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'==[ Functions ]================================================================
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function ScanFolder(p)
Dim i, SubDirs, s
    Set SubDirs = FSO.GetFolder(p).Files
    For Each i in SubDirs
        s = s & i.name & vbNewLine
    Next
ScanFolder = s
End Function
'--[ Вывод формы через IE ]-----------------------------------------------------
Sub ShowForm(content)
Const READYSTATE_COMPLETE = 4
    'Загружаем IE
    Set IEObj = WScript.CreateObject("InternetExplorer.Application", "IE_")
    With IEObj
        'Прячем меню, панели инструментов и строку состояния
        .MenuBar = 0
        .ToolBar = 0
        .StatusBar = 0
    End With
    'Открываем страничку
    IEObj.Navigate("about:blank")
    Do While (IEObj.Busy And Not (IEObj.ReadyState = READYSTATE_COMPLETE))
        WScript.Sleep(200)
    Loop
    With IEObj.document
        .body.onKeyPress = GetRef("IEOnKeyPress")
        .write "<!DOCTYPE HTML PUBLIC ""-//W3C//DTD XHTML 1.1 Strict//EN""" & vbNewLine & _
            """http://www.w3.org/TR/xhtml11/DTD/xhtml11-strict.dtd"">" & vbNewLine & _
            "<html xmlns=""http://www.w3.org/1999/xhtml"" xml:lang=""ru"">" & vbNewLine & _
            "<head>" & vbNewLine & _
            "<meta http-equiv=""Content-Type"" content='text/html; charset=""windows-1251""'/>" & vbNewLine & _
            "<title>" & ScriptName & " :: ShowForm" & "</title>" & vbNewLine & _
            "</head>" & vbNewLine & _
            "<body>" & vbNewLine & _
            content & vbNewLine & _
            "</body>" & vbNewLine & _
            "</html>"
        Dim objWindow
        Set objWindow = .parentWindow
        With objWindow
            .moveTo 0,0
            .resizeTo .screen.availWidth, .screen.availHeight
        End With
        Set objWindow = Nothing
    End With
    'Отображаем окно IE
    IEObj.Visible = 1
    IEQuitFlag = False
    Do
        WScript.Sleep(100)
    Loop Until IEQuitFlag
    On Error Resume Next
    IEObj.Quit
    Set IEObj = Nothing
End Sub
'---------------------------------------------------------------------------
Sub IE_OnQuit
    IEQuitFlag = True
End Sub
'---------------------------------------------------------------------------
Sub IEOnKeyPress
    'If <ESC>
    If Me.ownerDocument.parentWindow.event.keyCode = 27 Then
        IEQuitFlag = True
    End If
End Sub

но в строке 38 ссылка на функцию похоже не может быть присвоена обработчику событий, т.к. функция находится за пределами видимости (в глобальном контексте). И ф. IEOnKeyPress не отрабатывает.
Вопрос: что сделать, чтобы ф. IEOnKeyPress отработала?
Хотя желательно вообще вывод формы оформить в виде отдельного скрипта и вызывать его из другого скрипта. Но умеет ли VBScript вызвать на исполнение другой VBScript и подождать, пока тот завершится?
PM   Вверх
Akina
Дата 8.3.2014, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 453



Текст процедуры пишите непосредственнно в текст веб-страницы формы.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Ciber SLasH
Дата 8.3.2014, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

Репутация: нет
Всего: 67



А как мне из веб-страницы закрыть окно, созданное IE ?
Даже если написать window.close(), то IE запрашивает подтверждение.
PM   Вверх
Ciber SLasH
Дата 8.3.2014, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

Репутация: нет
Всего: 67



Задача решена.
Встроил в контент страницы скрипт, менющий флаг закрытия. А из внешнего VBScript-а проверяю это значение и уничтожаю объект IE.
Код

Option Explicit
Dim IEObj
Dim IEQuitFlag
Dim ScriptName
ScriptName = WScript.ScriptName
Dim Path
Path = WScript.Arguments(0)
Dim FSO
Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
'-------------------------------------------------------------------------------
Call ShowForm(Replace(ScanFolder(Path), vbNewLine, "<br/>"))
WScript.Quit(0)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'==[ Functions ]================================================================
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function ScanFolder(p)
Dim i, SubDirs, s
    Set SubDirs = FSO.GetFolder(p).Files
    For Each i in SubDirs
        s = s & i.name & vbNewLine
    Next
ScanFolder = s
End Function
'--[ Вывод формы через IE ]-----------------------------------------------------
Sub ShowForm(content)
Const READYSTATE_COMPLETE = 4
    'Загружаем IE
    Set IEObj = WScript.CreateObject("InternetExplorer.Application", "IE_")
    With IEObj
        'Прячем меню, панели инструментов и строку состояния
        .MenuBar = 0
        .ToolBar = 0
        .StatusBar = 0
    End With
    'Открываем страничку
    IEObj.Navigate("about:blank")
    Do While (IEObj.Busy And Not (IEObj.ReadyState = READYSTATE_COMPLETE))
        WScript.Sleep(200)
    Loop
    With IEObj.document
        .write "<!DOCTYPE HTML PUBLIC ""-//W3C//DTD XHTML 1.1 Strict//EN""" & vbNewLine & _
            """http://www.w3.org/TR/xhtml11/DTD/xhtml11-strict.dtd"">" & vbNewLine & _
            "<html xmlns=""http://www.w3.org/1999/xhtml"" xml:lang=""ru"" onKeyPress=""keyHandler(event)"">" & vbNewLine & _
            "<head>" & vbNewLine & _
            "<meta http-equiv=""Content-Type"" content='text/html; charset=""windows-1251""'/>" & vbNewLine & _
            "<title>" & ScriptName & " :: ShowForm" & "</title>" & vbNewLine & _
            "<script type=""text/javascript"">" & vbNewLine & _
            "//<![CDATA[" & vbNewLine & _
            "var quitFlagDoc = false;" & vbNewLine & _
            "function keyHandler(e) {" & vbNewLine & _
            "    if (e.keyCode = 27) {" & vbNewLine & _
            "        quitFlagDoc = true;" & vbNewLine & _
            "    }" & vbNewLine & _
            "}" & vbNewLine & _
            "// ]]>" & vbNewLine & _
            "</script>" & vbNewLine & _
            "</head>" & vbNewLine & _
            "<body>" & vbNewLine & _
            content & vbNewLine & _
            "</body>" & vbNewLine & _
            "</html>"
        Dim objWindow
        Set objWindow = .parentWindow
        With objWindow
            .moveTo 0,0
            .resizeTo .screen.availWidth, .screen.availHeight
        End With
        Set objWindow = Nothing
    End With
    'Отображаем окно IE
    IEObj.Visible = 1
    IEQuitFlag = False
    Do
        WScript.Sleep(100)
        IEQuitFlag = IEObj.document.parentWindow.quitFlagDoc
    Loop Until IEQuitFlag
    On Error Resume Next
    IEObj.Quit
    Set IEObj = Nothing
End Sub
'---------------------------------------------------------------------------
Sub IE_OnQuit
    IEQuitFlag = True
End Sub


Это сообщение отредактировал(а) Ciber SLasH - 8.3.2014, 22:05
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.1199 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.