Руководство по PuppetMaster - Написание действий на VBScript
Пожалуйста, обратите
внимание, что интерфейс VBScript будет изменяться и дополняться по мере разработки
PuppetMaster.
Это руководство по
написанию действий на VBScript для PuppetMaster. PuppetMaster доступен по адресу: http://www.lim.com.au/PuppetMaster
Один из путей настройки PuppetMaster -
использование VBScript. Практически, некоторые из действий для программ, поддерживаемых PuppetMaster по умолчанию,
(напр. PowerPoint, tines)
полностью написаны на VBScript.
Это не учебник по VBScript - есть много
других учебников в интернете, которые обучают синтаксису и возможностям языка.
Это просто руководство о том, как использовать VBScript, чтобы обеспечить точное управление от PuppetMaster.
Начнём с примера.
Set PowerPointApp =
CreateObject("PowerPoint.Application")
PowerPointApp.SlideShowWindows(1).View.Next
Этот скрипт позволяет
презентации перейти к её следующему слайду. Чтобы использовать это, перейдите в
Preferences
-> Menus
-> Add Item
Выберите Visual Basic Script, задайте имя,
(напр. ‘Next Slide’)
и вставьте скрипт. Нажмите OK.
Действие будет добавлено
в Available items.
Чтобы отобразить его в телефоне, перенесите действие в левую панель. Оно
отобразится в телефоне немедленно, если он подключен.
Попробуйте, как это
действует! Загрузите презентацию PowerPoint, начните её воспроизведение и тогда выберите ’Next Slide’ на вашем телефоне.
Вы должны обнаружить, что это работает, как указано.
Этот пример
демонстрирует, как можно создавать простые неинтерактивные скрипты.
Создадим новое действие VBScript, называющееся ‘Hello World’. Вставьте следующий
скрипт.
Const etActivate = 1
If ExecuteData.Type = etActivate Then
RemoteController.ShowDialog
"Hello World"
End If
Когда вы используете этот
скрипт на вашем телефоне, он покажет ‘Hello World’. Нажатие кнопок OK или Back вернёт вас в предыдущее меню.
Когда PuppetMaster вызывает VBScript, он предоставляет
два объекта - ExecuteData и RemoteController. ExecuteData передаёт информацию, почему был вызван скрипт.
Когда скрипт впервые
выбран из меню, он посылает событие типа etActivate. Если скрипт не сообщает RemoteController что-нибудь отобразить, то скрипт завершается.
Однако, если скрипт показывает что-то на дисплее RemoteController, то PuppetMaster присваивает скрипту активное состояние ('active'), и он будет
вызван позже.
RemoteController предоставляет методы для взаимодействия с
устройством. Здесь мы просто показали текст ‘Hello World’
PuppetMaster вызывает скрипт с ExecuteData.Type, установленным на etKeyPress, когда пользователь нажимает кнопку. Попробуйте
запустить следующий скрипт.
Const etActivate = 1, etKeyPress = 4
Select Case ExecuteData.Type
Case etActivate
RemoteController.ShowDialog
"Нажмите клавишу"
Case etKeyPress
RemoteController.ShowDialog
"Вы нажали
" & ExecuteData.KeyID
End Select
Если вы посмотрите, как
работает этот скрипт, то обратите внимание, что нажатие клавиши передаётся как
часть ExecuteData.
Время от времени, вам
может понадобиться дать скрипту знать, «что произошло раньше». Объект RemoteController обладает
свойством ‘Store’, которому вы можете установить любое значение (или массив значений),
которое будет сохраняться между вызовами. Попробуйте следующий пример
Const etActivate = 1, etKeyPress = 4
Select Case ExecuteData.Type
Case etActivate
RemoteController.ShowDialog
"Нажмите клавишу"
RemoteController.Store =
0
Case etKeyPress
RemoteController.Store =
RemoteController.Store + 1
RemoteController.ShowDialog
RemoteController.Store & ": Вы нажали " & ExecuteData.KeyID
End Select
Store инициализируется нулём в секции etActivate и увеличивается каждый раз при нажатии клавиши.
Вы должны увидеть это в текстовом выводе на вашем телефоне.
Перед продолжением
примеров скриптов, важно изучить разные типы событий…
Реальные цифровые
значения для типов событий можно найти в Справочнике
по Объектам.
etActivate посылается, когда пользователь впервые щёлкает по скрипту в меню. Если
скрипт НЕ использует ни одного из методов RemoteController.Show*, то нет событий, посылаемых скрипту, и меню
остаётся активным. Например, такой скрипт может просто запустить какое-то
приложение на компьютере, не требующее взаимодействия с пользователем. Чтобы
обеспечить интерактивность, скрипт должен обрабатывать событие etActivate.
etBegin посылается, когда скрипт впервые активизируется. EtEnd - когда скрипт деактивизируется. Чтобы сделаться
активным, скрипт должен использовать метод RemoteController.Show* в ответ на etActivate
etKeyPress и etKeyRelease - это события, посылаемые скрипту, когда клавиши нажимаются и отпускаются.
Свойство ExecuteData.KeyID может быть использовано, чтобы определить,
какая клавиша нажата/отпущена.
etIntegerInput и etTextInput - события, посылаемые, когда пользователем
введено значение. Меню посылают 0-базовое целое значение, представляющее индекс
элемента, который был выбран.
etNext и etBack - специальные случаи пользовательского ввода, так как они могут
применяться очень разными путями в телефонах. Обычно они связаны с кнопками «OK» и «Назад». etNext и etBack требуют, чтобы вы
вызвали метод RemoteController.Show*, если хотите, чтобы скрипт остался активен.
Неперехваченные etNext/etBack
приведут к тому, что PuppetMaster отобразит предыдущее меню.
Событие etTimer посылается скрипту
периодически, чтобы обеспечить обновление на телефоне с течением времени.
Таймеры устанавливаются использованием RemoteController.StartTimer(миллисекунды) и останавливаются использованием RemoteController.StopTimer.
Чтобы позволить PuppetMaster периодически
вызывать ваш скрипт, вам нужно использовать метод RemoteController.StartTimer. Вы также должны оповестить об остановке
срабатывания периодических событий при выходе. Следующий пример использует
встроенную в VBScript функцию Time
Const etActivate = 1, etBegin = 2, etEnd = 3, etTimer = 8
Select Case ExecuteData.Type
Case etActivate, etTimer
RemoteController.ShowDialog
Time
Case etBegin
RemoteController.StartTimer(1000)
Case etEnd
RemoteController.StopTimer
End Select
RemoteController.StartTimer использует параметр в миллисекундах, который
определяет время между каждым событием etTimer. Запуск скрипта,
приведённого выше, должен привести к отображению системного времени в вашем
мобильном телефоне.
Следующий пример даёт
идею, как создавать скрипты с множеством состояний. Понимание, как это
работает, останется упражнением для читателя.
Const etActivate = 1, etIntegerInput = 6, etNext = 7, etBack = 9
Const stMenu = 0, stDialog = 1, stPercentInput = 2
Sub ShowMenu
RemoteController.Store(0) = stMenu
RemoteController.ShowMenu "Пример
Мультисостояний", array("Показ. диалог", "Показ. % ввода")
End Sub
Sub HandlePercentInput
Select Case
ExecuteData.Type
Case etBack, etNext
ShowMenu
Case etIntegerInput
RemoteController.Store(1) =ExecuteData.Input
End Select
End Sub
Sub HandleDialog
Select Case ExecuteData.Type
Case etBack, etNext
ShowMenu
End Select
End Sub
Sub HandleMenu
If ExecuteData.Type =
etIntegerInput Then
Select Case
ExecuteData.Input
Case 0
RemoteController.ShowDialog"Текущий
% " & RemoteController.Store(1)
RemoteController.Store(0)
= stDialog
Case 1
RemoteController.ShowPercentInput "Введите процент",RemoteController.Store(1)
RemoteController.Store(0) = stPercentInput
End Select
End If
End Sub
If ExecuteData.Type = etActivate Then
Dim StoreData(2)
RemoteController.Store =
StoreData
RemoteController.Store(0) = stMenu
RemoteController.Store(1) = 50 ' Просто
даёт проценту некоторое стартовое значение
ShowMenu
End If
Select Case RemoteController.Store(0)
Case stMenu
HandleMenu
Case stDialog
HandleDialog
Case stPercentInput
HandlePercentInput
End Select
Объект ExecuteData предоставляет информацию, почему был запущен скрипт.
|
Имя |
Замечания |
|
Type |
Предоставляет значение типа.
Сейчас определены следующие: etActivate = 1 etBegin = 2 etEnd = 3 etKeyPress = 4 etKeyRelease = 5 etIntegerInput = 6 etBack = 7 etTimer = 8 etNext = 9 etTextInput = 10 Они обсуждаются в
разделе Типы событий. |
|
KeyID |
Строковое значение,
представляющее нажатую клавишу. “<” - Стрелка влево “>” - Стрелка вправо “^” - Стрелка вверх “v” - Стрелка вниз “0” – “9”, “#, *” - Клавиатура “u”, “d” - клавиши + и - на телефонах Sony Ericsson “f” - Кнопка меню (!abc) “c” - Кнопка C
(недоступна на Nokia 6230) |
|
Input |
Целое значение для
меню, процент ввода Строковое значение для текстового ввода. |
Объект RemoteController предоставляет доступ к устройству дистанционного
управления.
|
Имя |
Замечания |
|
CanShowImage |
Возвращает true или false в зависимости от
возможности устройства к показу изображений. |
|
Store |
Это значение
используется для хранения данных между многими исполнениями скрипта. См.
раздел Устойчивые данные. |
|
ImageWidth |
Это ширина дисплея для
вывода рисунка в устройстве |
|
ImageHeight |
Это высота дисплея для
вывода рисунка в устройстве |
|
Имя |
Замечания |
|
ShowDialog Текст |
Показывает Текст на
устройстве. |
|
ShowImage ImageFileName, ImageFileType, TimeBeforeHighQuality |
ImageFileName должно быть полным путём к файлу рисунка
поддерживаемого типа. TimeBeforeHighQuality управляет временем активной деградации рисунка.
Если другой рисунок был показан в течение последнего TimeBeforeHighQuality (в миллисекундах), то рисунок будет преобразован с понижением качества
для улучшения интерактивности, если требуется. Чтобы всегда показывать
рисунки высокого качества, задайте этому параметру 0. Показ изображения с
размерами, иными чем ImageWidth и ImageHeight приводит к его ресэмплированию для умещения на
дисплее. ImageFileType - поддерживаемые типы изображений, на данный
момент: BMP, JPG, PCX, TGA. |
|
ShowMenu Заголовок, МассивМеню |
МассивМеню - это массив
строк. Посылает ввод посредством 0-базового etIntegerInput |
|
ShowPercentInput Заголовок, НачПроцент |
Показывает процентный
ввод на телефоне. События etIntegerInput генерируются для каждого изменения значения. |
|
ShowProgress Текст |
Показывает
прогрессивный диалог. |
|
ShowSortedMenu Заголовок, МассивМеню |
То же, что и ShowMenu, но сортирует
имена перед показом. |
|
ShowText Заголовок, Текст |
Показывает Текст на
устройстве. Если текст очень длинный и не помещается на экране, пользователь
может прокручивать его стрелками Вверх/Вниз |
|
ShowTextInput Заголовок, НачТекст |
Позволяет пользователю
вводить текст. Многие телефоны поддерживают T9
- метод ускоренного ввода текста для этого. |
|
Store |
Это значение используется
для хранения данных между многими выполнениями скрипта. См. раздел Устойчивые данные. |
|
Тип режима |
События, относящиеся
к режиму |
|
Dialog |
etKeyPress, etKeyRelease |
|
Text |
etKeyPress, etKeyRelease |
|
Percent Input |
EtIntegerInput |
|
Progress |
etKeyPress, etKeyRelease |
|
Menu |
EtIntegerInput |
|
Text Input |
EtTextInput |
|
Image |
etKeyPress, etKeyRelease |
Комментарии,
исправления, вопросы? Пишите: jeff@lim.com.au