Доброго времени суток!
Пишу программу с возможностью заскриптовать пользователю кое-какие действия и столкнулся с проблемой: не хотят выполнятся на VBScript'е следующие вещи:
- использование объекта WScript, а именно методов Sleep и Quit
- объект WScript не создается и не получается получить его ч/з GetObject
Хотя в описании компонента написано: "От элемента VBScript данное решение отличается тем, что использует скрипты операционной системы, которые входят в стандартную установку во всех версиях начиная с XP."
Т.ж. нет описания объекта sys
Схема для тестирования:
code_20793.txt
У кого какие идеи?
Этот топик читают: Гость
Ответов: 33
Рейтинг: 1
|
|||
карма: 0 |
| ||
файлы: 1 | code_20793.txt [881B] [230] |
Главный модератор
Ответов: 2999
Рейтинг: 396
|
|||
lsd25 писал(а): - использование объекта WScript, а именно методов Sleep и Quit
- объект WScript не создается и не получается получить его ч/з GetObject Невозможно использовать объект WScript и соответственно его методы в компоненте VBJScript! Если интересуют подробности, предлагаю поискать на форуме - эта тема уже обсуждалась. Например, вот здесь: http://hiasm.com/forum.html?q=3&p=103098#p103098 |
|||
карма: 6 |
|
Ответов: 33
Рейтинг: 1
|
|||
Хорошо, я тоже предпологал это.
Тогда вопрос: как реализовать выход из скрипта( т.е. заменить WScript.Quit)? Допустим у меня в скрипте цикл, который должен прерваться только основной программой( т.е есть есть точка doStop), а у компонента VBJScript нет такого метода по прерыванию/постановке на паузу текущего скрипта Просто метод Sleep я на IC сделал, а вот как сделать Quit ума не приложу |
|||
карма: 0 |
|
Главный модератор
Ответов: 2999
Рейтинг: 396
|
|||
lsd25 писал(а): Просто метод Sleep я на IC сделал sleep method lsd25 писал(а): Тогда вопрос: как реализовать выход из скрипта( т.е. заменить WScript.Quit)?Непонятен вопрос, так как все методы компонента VBJScript это подпрограммы, например:
То для выхода из любой их них достаточно выполнить:
|
|||
карма: 6 |
| ||
файлы: 1 | code_20801.txt [911B] [290] |
Ответов: 33
Рейтинг: 1
|
|||
Nic писал(а): sleep method- я в IC просто функцию sleep использую Nic писал(а): Непонятен вопрос, так как все методы компонента VBJScript это подпрограммы, например:
... То для выхода из любой их них достаточно выполнить: ... Хорошо, раз не понятен, вот задача: моя основная рабочая процедура( т.е. sub doWork) находиться в бесконечном цикле, как прервать ее выполнение из основной программы( например, у полиморфных контейнеров есть ##delete/##clear, а у VBJScript'а нету). Исползовать мульти-тред не получается, полиморфная форма/панель так-же не активна, пока выполняется скрипт( поэтому и неактивна кнопка, для остановки). Да, кстати, использовать exit sub не решит проблему, т.к. она завершает только текущую процедуру, по этому у меня есть спец. событие onStop - которое устанавливает текст скрипта равным нулю, но опять же это внутри скрипта, из вне кнопка "Стоп" занята Вот схема: code_20802.txt |
|||
карма: 0 |
| ||
файлы: 1 | code_20802.txt [2.3KB] [161] |
Главный модератор
Ответов: 2999
Рейтинг: 396
|
|||
lsd25 писал(а): Исползовать мульти-тред не получается Подключите так:
|
|||
карма: 6 |
| ||
Голосовали: | lsd25 |
Ответов: 33
Рейтинг: 1
|
|||
Nic - респект!!!
Заработало! Всем спасибо! P.S. Думал, что прогу переписывать надо... Уф, обошлось... Сэкономленное время потрачу на раздел в WiKi. Кстати, есть где-нибудь подробное описание объекта sys? |
|||
карма: 0 |
|
Главный модератор
Ответов: 2999
Рейтинг: 396
|
|||
lsd25 писал(а): есть где-нибудь подробное описание объекта sys?tsdima писал(а): Если ты почитаешь документацию по windows script, то тебе станет ясно, зачем наряду с обычной (встроенной в движок скрипта) функцией CreateObject существует ещё и метод WScript.CreateObject. Главное его отличие как раз в том, что он позволяет организовать обработку событий. Объект WScript создаётся автоматически при обработке скрипта программой WScript.exe и это его системный объект, наподобие нашего sys. Но наш системный объект не содержит такой функции.Подробности в этой теме: http://hiasm.com/forum.html?q=3&p=103098#p103098 ------------ Дoбавленo в 11.21: tsdima писал(а):
Добавил возможность работы с массивами из скрипта, например: var a = sys.Array; a.Add(666); a.Set(0, 123); sys.onEvent(a.Count); sys.onEvent(a.Get(0)); ------------ Дoбавленo в 11.37: tsdima писал(а):
CreateObject встроен в VBScript, т.е. это функция неотделима от языка. А sys.CreateObject - это моя функция, которую я добавил к объекту sys, и её параметры я обрабатываю сам, т.е. создать объект, приаттачить обработчик событий, реализовать этот обработчик, и т.п. |
|||
карма: 6 |
|
Ответов: 5227
Рейтинг: 587
|
|||
Nic, в памяти всплывает что были проблемы с запусками скриптов в потоке. Однозначно утверждать не могу т.к давно не эксперементировал.
|
|||
карма: 4 |
|
Главный модератор
Ответов: 2999
Рейтинг: 396
|
|||
andrestudio писал(а): были проблемы с запусками скриптов в потокеВозможно, решением проблем является помешение компонента VBJScript в мультик в режиме Mode=OnlyOnce |
|||
карма: 6 |
|
Ответов: 33
Рейтинг: 1
|
|||
Nic писал(а): Возможно, решением проблем является помешение компонента VBJScript в мультик в режиме Mode=OnlyOnceВот схемка, может кому-то пригодиться: code_20828.txt В принципе и в режиме Dynamic проверял - работает. |
|||
карма: 0 |
| ||
файлы: 1 | code_20828.txt [1.4KB] [215] |
Ответов: 301
Рейтинг: 11
|
|||
карма: 0 |
| ||
файлы: 1 | code_20830.txt [559B] [224] |
Главный модератор
Ответов: 2999
Рейтинг: 396
|
|||
Не надо путать тёплое с мягким. Схема Sleep метода призвана эмулировать програмный "сон" процесса на заданное время, а не воспроизведение звука.
|
|||
карма: 6 |
|
Ответов: 33
Рейтинг: 1
|
|||
Согласен с Nic'ом
|
|||
карма: 0 |
|
14