Создание формы из воздуха (WSH)
От: Аноним  
Дата: 18.05.04 09:31
Оценка:
Файл CreateUserControl.vbs

' Пытаюсь средствами WSH создать форму с контролами:
' С контролами проблем нет - у любого имеющего MS Office есть FM20.DLL вот и использую ее:

Dim objForm
Set objForm = WScript.CreateObject("Forms.Form.1")

'Set objUForm = objForm.Add ("Forms.UserForm.1", "MyForm", True)
'Не работает: "Недопустимая строка с указанием класса" :(((
'Поэтому формы, как таковой, нет

With objForm
   .Caption = "MyForm"
   .Enabled = True
End With

Set objLabel = objForm.Add ("Forms.Label.1", "MyLabel", True)
With objLabel
   .Caption = "Label"
   .Top = 10
   .Left = 10
   .Width = 200
   .Height = 20
   .Enabled = True
End With

Set objTextBox = objForm.Add ("Forms.TextBox.1", "MyTextBox", True)
With objTextBox
   .Text = "TextBox"
   .Top = 40
   .Left = 10
   .Width = 200
   .Height = 20
   .Enabled = True
End With

Set objComboBox = objForm.Add ("Forms.ComboBox.1", "MyComboBox", True)
With objComboBox
   .Text = "ComboBox"
   .Top = 70
   .Left = 10
   .Width = 200
   .Height = 20
   .Enabled = True
End With

'Контролы создаются но их НЕ ВИДНО! (очевидно, потому что нет формы)
For Each objCnt In objForm.Controls
    MsgBox objCnt.Name
Next

Set objForm = Nothing
Set objLabel = Nothing
Set objTextBox = Nothing
Set objComboBox = Nothing
WScript.Quit

'Как же все таки создать ВИДИМУЮ ФОРМУ С КОНТРОЛАМИ ???
Re: Создание формы из воздуха (WSH)
От: Аноним  
Дата: 18.05.04 09:52
Оценка:
Ах, да:
Пример РЕАЛЬНЫЙ! (т.е. копируем код в файл и запускаем)
Контролы есть только ИХ НЕ ВИДНО ((
Как же эту форму с контролами увидеть???

(Список всех Свойств и Методов FM20.DLL — http://arial.net.ru/user/96489246964/FM20.htm )
Использовать другую библиотеку (самодельную — видал такие) не хочу, т.к. условие — "Только стандартные библиотеки, имеющиеся в ЛЮБОЙ версии Windows"
Re[2]: Создание формы из воздуха (WSH)
От: dimzon Россия http://dimzon541.narod.ru
Дата: 18.05.04 15:37
Оценка:
a HTA использовать не хочешь? Работает с IE 5+
Re[3]: Создание формы из воздуха (WSH)
От: Аноним  
Дата: 19.05.04 06:01
Оценка:
Здравствуйте, dimzon, Вы писали:

D>a HTA использовать не хочешь? Работает с IE 5+


Вообще то можно попробовать... Был бы ОЧЕНЬ благодарен за код выполняющий аналогичные действия.

Но, все таки, КАК без HTA ?

Вот тут http://www.borncity.de/WSHBazaar/WSHForm.htm какой то Гюнтер Борн сляпал свою COM-компоненту с помощью которой из скрипта можно создавать простенькие формы. Попробовал я... ХУДО.
Во первых — убого (TextBox, да Label)
Во вторых — чужую OCX-сину за собой таскать и регистрировать
И это в то время, когда практически у каждого есть шикарная и многофункциональная FM20.DLL !
Не вижу я принципиальной разницы между Гюнтеровской WSHForm.ocx и Майкрософтовской FM20.DLL
Или чой то туплю я?
Re[2]: Создание формы из воздуха (WSH)
От: Alexander_Drugakov Россия  
Дата: 19.05.04 12:11
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Ах, да:

А>Пример РЕАЛЬНЫЙ! (т.е. копируем код в файл и запускаем)
А>Контролы есть только ИХ НЕ ВИДНО ((
А>Как же эту форму с контролами увидеть???

А>(Список всех Свойств и Методов FM20.DLL — http://arial.net.ru/user/96489246964/FM20.htm )

А>Использовать другую библиотеку (самодельную — видал такие) не хочу, т.к. условие — "Только стандартные библиотеки, имеющиеся в ЛЮБОЙ версии Windows"

Вот ...

Dim objWord
Set objWord = WScript.CreateObject("Word.Application")

objWord.ShowVisualBasicEditor = True

Dim objVBE
Set objVBE = objWord.VBE

Dim objVBComp
Set objVBComp = objVBE.ActiveVBProject.VBComponents.Add(vbext_ct_MSForm)

Set objForm = objVBComp.Designer

With objForm
.Caption = "MyForm"
End With

Set objLabel = objForm.Add ("Forms.Label.1", "MyLabel", True)
With objLabel
.Caption = "Label"
.Top = 10
.Left = 10
.Width = 200
.Height = 20
.Enabled = True
End With

Set objTextBox = objForm.Add ("Forms.TextBox.1", "MyTextBox", True)
With objTextBox
.Text = "TextBox"
.Top = 40
.Left = 10
.Width = 200
.Height = 20
.Enabled = True
End With

Set objComboBox = objForm.Add ("Forms.ComboBox.1", "MyComboBox", True)
With objComboBox
.Text = "ComboBox"
.Top = 70
.Left = 10
.Width = 200
.Height = 20
.Enabled = True
End With

'For Each objCnt In objForm.Controls
' MsgBox objCnt.Name
'Next

objWord.ShowVisualBasicEditor = False
objVBE.CommandBars("Run").Controls("Run Sub/UserForm").Execute

Set objForm = Nothing
Set objLabel = Nothing
Set objTextBox = Nothing
Set objComboBox = Nothing
WScript.Quit
Re[3]: Создание формы из воздуха (WSH)
От: Аноним  
Дата: 21.05.04 15:55
Оценка:
Здравствуйте, Alexander_Drugakov, Вы писали:

A_D>Set objVBComp = objVBE.ActiveVBProject.VBComponents.Add(vbext_ct_MSForm)


Вот на этой строке орет:

Ошибка: Ошибка программирования объектов
Код: 800A01B8
Источник: Ошибка выполнения Microsoft VBScript

В общем — "Method 'Add' of object '_VBComponents' failed"

Но идея — понятна (создать форму в дизайнере VBA)...
А может быть пустую форму можно создать как нибудь иначе? (Не обязательно с использованием FM20.DLL)
Создать, а потом натыкать в нее контролы из MSForms ?
Re[4]: Создание формы из воздуха (WSH)
От: Другаков Александр Россия  
Дата: 24.05.04 06:45
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Alexander_Drugakov, Вы писали:


A_D>>Set objVBComp = objVBE.ActiveVBProject.VBComponents.Add(vbext_ct_MSForm)


А>Вот на этой строке орет:

А>

Ошибка: Ошибка программирования объектов
А>Код: 800A01B8
А>Источник: Ошибка выполнения Microsoft VBScript

А>В общем — "Method 'Add' of object '_VBComponents' failed"
Ну а оболочка VBE(Visual Basic Editor) запускается и видима ? Попоробуй для начала просто в ней поиграться — создать форму(модуль) там...

А>Но идея — понятна (создать форму в дизайнере VBA)...

А>А может быть пустую форму можно создать как нибудь иначе? (Не обязательно с использованием FM20.DLL)
А>Создать, а потом натыкать в нее контролы из MSForms ?
Думаю не получится. Я перерыл MSDN — нигде нет примеров использования MSForms(есть только файлик fm.chm). В описании объектов MSForms где то нашел, что компоненты вставляются в UserForm, но создать ее нельзя напрямую, можно взять у окна Designer в VBE, который сам берется у объектов MS Office. Хотя конечно это не вся правда — создать то форму и натолкать в ее компонентов можно — но вот показать... В интерфейсах typelibrary нет ничего похожего на свойства и методы управления visible. Так что из воздуха можно взять только азот, кислород...
Re[5]: Создание формы из воздуха (WSH)
От: Аноним  
Дата: 25.05.04 05:00
Оценка:
Здравствуйте, Другаков Александр, Вы писали:

ДА>Ну а оболочка VBE(Visual Basic Editor) запускается и видима ?

Запускается. Видима.

ДА>Попоробуй для начала просто в ней поиграться — создать форму(модуль) там...

Ну можно... Но ТОЛЬКО поиграться

А>>Но идея — понятна (создать форму в дизайнере VBA)...

А>>А может быть пустую форму можно создать как нибудь иначе? (Не обязательно с использованием FM20.DLL)
А>>Создать, а потом натыкать в нее контролы из MSForms ?
ДА>Думаю не получится.
Ох как жаль ((

ДА>Я перерыл MSDN —

ДА> В интерфейсах typelibrary нет ничего похожего на свойства и методы управления visible.
У MSForms — нет.
Ну а если ПУСТУЮ ФОРМУ создавать НЕ С ПОМОЩЬЮ FM20.DLL, а с помощью КАКОЙ ТО ДРУГОЙ библиотеки?
Создать, а потом натыкать в нее контролы из MSForms ?
Re[6]: Создание формы из воздуха (WSH)
От: Другаков Александр Россия  
Дата: 25.05.04 08:31
Оценка:
Здравствуйте, Аноним, Вы писали:

ДА>>Попоробуй для начала просто в ней поиграться — создать форму(модуль) там...

А>Ну можно... Но ТОЛЬКО поиграться
Форма создается ? Модуль ?
Когда я разбирался с VBE у меня были проблемы с security на запуск макросов. Я устанавливал разрешения в настройках Word.
Попробуй может поможет.

ДА>>Я перерыл MSDN —

ДА>> В интерфейсах typelibrary нет ничего похожего на свойства и методы управления visible.
А>У MSForms — нет.
А>Ну а если ПУСТУЮ ФОРМУ создавать НЕ С ПОМОЩЬЮ FM20.DLL, а с помощью КАКОЙ ТО ДРУГОЙ библиотеки?
А>Создать, а потом натыкать в нее контролы из MSForms ?
1. Все контролы в MSForms — это компоненты ActiveX. Можно создать другой ActiveX, который бы создавал окно с поддержкой хостинга компонентов ActiveX. Через интерфейс выставляемый твоим компонентом можно будет добавлять(удалять) контролы MSForms на это окно.
2. Еще можно поковырять UserForm на предмет выяснения методов для показа формы на экране. Задача это будет трудоемкая.

Ты гуглем не искал примеров использования контролов в MSForms ?
Re[7]: Создание формы из воздуха (WSH)
От: Другаков Александр Россия  
Дата: 25.05.04 14:11
Оценка:
Здравствуйте, Другаков Александр, Вы писали:

ДА>Здравствуйте, Аноним, Вы писали:


ДА>>>Попоробуй для начала просто в ней поиграться — создать форму(модуль) там...

А>>Ну можно... Но ТОЛЬКО поиграться
ДА>Форма создается ? Модуль ?
ДА>Когда я разбирался с VBE у меня были проблемы с security на запуск макросов. Я устанавливал разрешения в настройках Word.
ДА>Попробуй может поможет.

ДА>>>Я перерыл MSDN —

ДА>>> В интерфейсах typelibrary нет ничего похожего на свойства и методы управления visible.
А>>У MSForms — нет.
А>>Ну а если ПУСТУЮ ФОРМУ создавать НЕ С ПОМОЩЬЮ FM20.DLL, а с помощью КАКОЙ ТО ДРУГОЙ библиотеки?
А>>Создать, а потом натыкать в нее контролы из MSForms ?
ДА>1. Все контролы в MSForms — это компоненты ActiveX. Можно создать другой ActiveX, который бы создавал окно с поддержкой хостинга компонентов ActiveX. Через интерфейс выставляемый твоим компонентом можно будет добавлять(удалять) контролы MSForms на это окно.
Это работает — уже проверил.
Re[8]: Создание формы из воздуха (WSH)
От: Аноним  
Дата: 26.05.04 12:57
Оценка:
Здравствуйте, Другаков Александр, Вы писали:

ДА>>Форма создается ? Модуль ?


Открывается окно VBE и все. Можно создать форму (ручками). Программно — хрен на рыло.

ДА>>Когда я разбирался с VBE у меня были проблемы с security на запуск макросов.


Не мой случай.

ДА>Это работает — уже проверил.


Если не жалко — можно РАБОЧИЙ пример?
Re[9]: Создание формы из воздуха (WSH)
От: Другаков Александр Россия  
Дата: 26.05.04 13:23
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Если не жалко — можно РАБОЧИЙ пример?

Давай мыло — вышлю...

А вообще смысл такой...
1. Можешь попробовать создать объект MS Forms Frame в ActiveX Control Test Container. В режиме Design (свойство DesignMode = True )
появляется еще и Toolbar с контролами, которые можно перетаскивать на frame. При отключенном режиме Design получаем рабочий run-time
frame.
2. Я сделал на ATL-проект ActiveX компонента, вставил в него ATL-объект Dialog и в это окно поместил ActiveX c progid — Forms.Frame.1 . В интерфейсе создал свойство для возврата IDispatch от Forms.Frame.1 и метод для показа этого диалогового окна.
3. Вот код скрипта:
'Dim objWord
'Set objWord = WScript.CreateObject("Word.Application")

'objWord.ShowVisualBasicEditor = True

'Dim objVBE
'Set objVBE = objWord.VBE

'Dim objVBComp
'Set objVBComp = objVBE.ActiveVBProject.VBComponents.Add(vbext_ct_MSForm)

'Set objForm = objVBComp.Designer

Set objFF = WScript.CreateObject("TestATLForms2.Forms2.1")

Set objForm = objFF.Frame 'WScript.CreateObject("Forms.Frame.1")

With objForm
.Caption = "MyForm"
.DesignMode = True
End With

Set objLabel = objForm.Add ("Forms.Label.1", "MyLabel", True)
With objLabel
.Caption = "Label"
.Top = 10
.Left = 10
.Width = 200
.Height = 20
.Enabled = True
End With

Set objTextBox = objForm.Add ("Forms.TextBox.1", "MyTextBox", True)
With objTextBox
.Text = "TextBox"
.Top = 40
.Left = 10
.Width = 200
.Height = 20
.Enabled = True
End With

Set objComboBox = objForm.Add ("Forms.ComboBox.1", "MyComboBox", True)
With objComboBox
.Text = "ComboBox"
.Top = 70
.Left = 10
.Width = 200
.Height = 20
.Enabled = True
End With

'For Each objCnt In objForm.Controls
' MsgBox objCnt.Name
'Next

'objWord.ShowVisualBasicEditor = False
'objVBE.CommandBars("Run").Controls("Run Sub/UserForm").Execute
objFF.DoDialog

Set objForm = Nothing
Set objLabel = Nothing
Set objTextBox = Nothing
Set objComboBox = Nothing
WScript.Quit

Хотелось бы знать для чего вся эта бадяга ? Может есть другие более простые пути решения проблемы ?
Re[10]: Создание формы из воздуха (WSH)
От: Аноним  
Дата: 27.05.04 05:49
Оценка:
Здравствуйте, Другаков Александр, Вы писали:

ДА>Давай мыло — вышлю...


mozers(собака)mail.ru

ДА>А вообще смысл такой...

ДА>1. Можешь попробовать создать объект MS Forms Frame в ActiveX Control Test Container. В режиме Design (свойство DesignMode = True )
ДА>появляется еще и Toolbar с контролами, которые можно перетаскивать на frame. При отключенном режиме Design получаем рабочий run-time
ДА>frame.
ДА>2. Я сделал на ATL-проект ActiveX компонента, вставил в него ATL-объект Dialog и в это окно поместил ActiveX c progid — Forms.Frame.1 . В интерфейсе создал свойство для возврата IDispatch от Forms.Frame.1 и метод для показа этого диалогового окна.

Попробовать то я могу... Но примерчик бы ОЧЕНЬ был кстати (дубоват я в этом деле )

ДА>Хотелось бы знать для чего вся эта бадяга ? Может есть другие более простые пути решения проблемы ?


Просто пишу скрипты. Но отсутствие каких бы то ни было форм в WSH убивает 90% идей.
Поэтому видится 3 решения:
— Либо добавлять возможности по созданию форм в чужой COM-сервер (утопия, т.к. исходников нет).
— Либо использовать что то общедоступное.
— Либо пытатся написать свою COM-компоненту, обладающую, помимо остальных, еще и способностями создавать пользовательские формы.
Re[11]: Создание формы из воздуха (WSH)
От: Другаков Александр Россия  
Дата: 27.05.04 05:56
Оценка:
Здравствуйте, Аноним, Вы писали:

А>mozers(собака)mail.ru

ушло

А>Просто пишу скрипты. Но отсутствие каких бы то ни было форм в WSH убивает 90% идей.

А>Поэтому видится 3 решения:
А> — Либо добавлять возможности по созданию форм в чужой COM-сервер (утопия, т.к. исходников нет).
А> — Либо использовать что то общедоступное.
А> — Либо пытатся написать свою COM-компоненту, обладающую, помимо остальных, еще и способностями создавать пользовательские формы.
Простейшие диалоговые окошки есть — message box и input message box (для ввода строки). Думаю этого достаточно для WSH, а если что надо покруче то Visual Basic ждет
Re[12]: Создание формы из воздуха (WSH)
От: dimzon Россия http://dimzon541.narod.ru
Дата: 27.05.04 12:33
Оценка: 1 (1)
Здравствуйте, Другаков Александр, Вы писали:


ДА>Простейшие диалоговые окошки есть — message box и input message box (для ввода строки). Думаю этого достаточно для WSH, а если что надо покруче то Visual Basic ждет


HTA поможет
Re: Создание формы из воздуха (WSH)
От: Аноним  
Дата: 28.05.04 16:26
Оценка:
А>Файл CreateUserControl.vbs


А может в консерватории что то не так .....


Ведь VBScript сделан как нечто связывающее объекты в Win.

Объекти являются приложения оформленые и зарегистрированиые как COM.

Форма или что тоже самое — главное окно приложения — является частью приложения то есть COMа.

Значит нужно искать подходящее приложение а затем попытаться его понять с точки зрения автоматизации.

На мой взгляд приложение которое есть всегда ( начиная с W98) это InternetExploer

Оно загружается как COM и работает с автоматизацией.



Set oIE = WScript.CreateObject("InternetExplorer.Application", "ie_")


oIE.AddressBar = false
oIE.FullScreen = false
oIE.MenuBar = false
oIE.Resizable = false
oIE.StatusBar = false
oIE.ToolBar = false

oIE.StatusText = "TEXT DOUWN" ' Можно получить текст
' oIE.Document '-> oHTMLDocument ' HTML это тоже объект который можно отработать

' oIE.Offline = true
' oIE.Quit() ' Завершить



oIE.Height = 600
oIE.Width = 780

IsQuit = false

cFile = "WWW.RSDN.RU" ' Это URL но ведь можно и локальный HTML только обязательно полный путь

oIE.Navigate( cFile )
oIE.Visible = true

' Этот цикл с зажержкой чтобы можно организовать выход из скрипта по завершении

WHILE NOT IsQuit
WScript.Sleep(100)
WEND

WScript.Quit

Sub ie_OnQuit ' Обработчик на выход

IsQuit = true

End Sub

Sub ie_OnKeyDown() ' Можно и на клавиатуру
msgbox( "Key" )
END Sub



Понятно что форму на локальном HTML можно накрутить такую что не в каждоц программе сделаеш.

В MSDN — есть описание обекта IE и HTMLDokument


С уважением BAA.
Re[2]: Создание формы из воздуха (WSH)
От: Аноним  
Дата: 01.06.04 09:25
Оценка:
Здравствуйте, Аноним, Вы писали:

А>На мой взгляд приложение которое есть всегда ( начиная с W98) это InternetExploer


Абсолютно верно Скачал шикарную книжку Гюнтера Борна "Windows Script Host 2.0 Developer's Guide" — там ВСЕ есть.
Re[3]: Создание формы из воздуха (WSH)
От: Аноним  
Дата: 01.06.04 19:30
Оценка:
А>Абсолютно верно Скачал шикарную книжку Гюнтера Борна "Windows Script Host 2.0 Developer's Guide" — там ВСЕ есть.


На русском по скриптам выпущены :

Гюнтер Борн "Руководство разработчика MS на Windows Script Host 2.0" с CD множество примеров.
Издательство Питер 2001г

Есть и примеры форм.


Андрей Попов "Windows Script Host для Windows 2000/XP" — с дискетой.
Издательство BHV 2003г

Андрей Попов "Командные файлы и сценарии Windows Script Host"
Издательство BHV 2002г

Джесси Торрес "Скрипты для администратора Windows. Специальный справочник"
Издательство Питер 2002г


Экк Томас "Сценарии ADSI для системного администрирования Windows NT/2000"
Москва 2000г. Кроме всего прочего Много скриптов для администрирования.


Это то что я знаю.

Может быть кто то дополнит ?


С уважением BAA.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.