Что нового

Расширенный GUI через COM (библиотека WSO)

Frostov

Новичок
Сообщения
3
Репутация
0
Вам надоело писать консольные сценарии? Вы хотите с легкостью писать сценарии административных настроек, ведущие диалог с пользователем? Тогда этот продукт для Вас! WindowSystemObject (WSO) - это универсальный программный комплекс для обеспечения доступа к оконной подсистеме Windows на базе архитектуры COM, для создания оконных интерфейсов в программах, написанных на сценарных (скриптовых) языках, а также в программах, написанных на других языках и в других системах программирования.

Основные особенности:

WSO обеспечивает полный доступ ко всем возможностям оконной системы, включая рисование в окнах и поддержку всех встроенных управляющих элементов Windows.
WSO поддерживает использование любых элементов ActiveX, таких как Internet Explorer или Windows Media Player.
WSO поддерживает работу со всеми популярными форматами графических файлов.
WSO доступен из любого языка программирования, поддерживающего COM-интерфейсы автоматизации.
Доступ к WSO осуществляется с помощью интуитивно понятной объектной модели, описанной в этом документе. Программисты, знакомые с оконным программированием для Windows, быстро обнаружат, что ничего нового им осваивать не нужно.
WSO обеспечивает полную поддержку обработки событий от оконных элементов.
WSO позволяет использовать символические имена констант, принятые в оконном программировании Windows, вместо их числовых значений.
Многопанельный интерфейс (Docking Framework).
Визуальный редактор форм (Designer).
WSO работает в любой современной версии Windows, а именно: 98SE, ME, NT 4, 2000, XP, 2003, Vista, 2008, 7, 8, 8.1, 10.


Ссылка на скачивание: veretennikov.org/Default.aspx
Онлайн документация (rus): veretennikov.org/WSO/Help/html/index.html
Приглашаю к обсуждению.
 
Автор
F

Frostov

Новичок
Сообщения
3
Репутация
0
События COM-объектов WSO

Пытаюсь понять как работает подключение к событиям COM-объектов.

Теория: veretennikov.org/WSO/Help/html/events.html (WSO) и autoit-script.ru/autoit3_docs/intro/ComRef.htm (autoit)

Приведенный ниже скрипт работает на так как ожидается. При нажатии на кнопку ничего не происходит. Однако при закрытии окна появляется окно с сообщением. Если нажать на кнопку несколько раз, а потом закрыть окно, то новое окно появится столько раз сколько было нажатий на кнопку. Возможно кто то сможет разобраться быстрее чем я? (прежде чем тестировать скрипт нужно установить WSO по ссылке из первого поста)

Код:
$o = ObjCreate("Scripting.WindowSystemObject")

$f = $o.CreateForm(0,0,0,0)

$f.ClientWidth = 500
$f.ClientHeight = 300
$f.CenterControl()

$b = $f.CreateButton(213,138,75,25,"Color Dialog")
$oe = ObjEvent ( $b, "b_" )

$f.Show()
$o.Run()

Func b_OnClick($sender)
   $f.MessageBox("Текст сообщения");
EndFunc



Добавлено:
Сообщение автоматически объединено:

Только отправил пост выше и почти сразу пришло решение! Дело в том, что фрагмент кода я брал из примера для JScript и пытался адаптировать под autoit вот отсюда veretennikov.org/WSO/Help/html/jscript.html

А вот и решение:

Код:
$o = ObjCreate("Scripting.WindowSystemObject")

$f = $o.CreateForm(0,0,0,0)

$f.ClientWidth = 500
$f.ClientHeight = 300
$f.CenterControl()

$b = $f.CreateButton(213,138,75,25,"Color Dialog")
$oe = ObjEvent ( $b, "b_" )

$f.Show()
;$o.Run()

Func b_OnClick($sender)
   $f.MessageBox("Текст сообщения");
EndFunc

While 1 
  Sleep(1000)   ; Обычное ожидание в цикле 
WEnd


в общем для использования в autoit отказываемся от функции run (запуск встроенного цикла обработки сообщений, он будет продолжаться до тех пор, пока видна какая либо форма или до вызова метода Stop.

WSO предусматривает внутренние методы обработки сообщений операционной системы, хотя их можно не использовать, а реализовывать свой цикл обработки событий.) и добавляем свой цикл внутри autoit.
 

Cytrus

Новичок
Сообщения
86
Репутация
1
Бессмысленно создавать СОМ-объект, возможности которого несравненно ниже.

Это актуально для JS/VBS/WSH.
AutoIt - это полноценный язык программирования.
А там, можно максимум создать другой COM-объект, типа (FSO/WshShell/WScript) чтобы сделать элементарное действие.
т.е., создавать экземпляры классов, и надеяться, что всё будет нормально.

И его обработчики несовершенны. Они неконтроллируемы.
На AutoItе можно тонко настраивать задержу на проверку нужного события.

В AutoIt вшиты все процессорные инструкции.
Т.е, неважно, какие классы и интерфейсы установлены у конечного пользователя.

Хоть на виртуальной машине, хоть на LiveCD AutoIt будет работать.

И самое смешное, он может работать с теми же самыми COM-объектами. Но гораздо гибче.

Я не думаю, что на этом полу-скирптовом языке, который чуть мощнее HTA,
можно напрямую работать с OLE-интерфейсами.

А в AutoItе можно. Главное, понимать, что это такое, что такое диспетчеризация,
таблицы виртуальных методов и т.д.

Можно не только создавать, но и подключаться к существующим экземплярам классов.
 
Верх