Руководство по PuppetMaster - Написание действий на VBScript

 

 

Пожалуйста, обратите внимание, что интерфейс VBScript будет изменяться и дополняться по мере разработки PuppetMaster.

1         Введение

 

Это руководство по написанию действий на VBScript для PuppetMaster. PuppetMaster доступен по адресу: http://www.lim.com.au/PuppetMaster

 

Один из путей настройки PuppetMaster - использование VBScript. Практически, некоторые из действий для программ, поддерживаемых PuppetMaster по умолчанию, (напр. PowerPoint, tines) полностью написаны на VBScript.

 

Это не учебник по VBScript - есть много других учебников в интернете, которые обучают синтаксису и возможностям языка. Это просто руководство о том, как использовать VBScript, чтобы обеспечить точное управление от PuppetMaster.

 

 

2         Неинтерактивные скрипты

 

Начнём с примера.

 

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’ на вашем телефоне. Вы должны обнаружить, что это работает, как указано.

 

Этот пример демонстрирует, как можно создавать простые неинтерактивные скрипты.

 

 

3         Скрипт Hello World

 

Создадим новое действие 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

 

 

4         Перехват клавиш

 

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.

 

 

5         Устойчивые данные

 

Время от времени, вам может понадобиться дать скрипту знать, «что произошло раньше». Объект 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 и увеличивается каждый раз при нажатии клавиши. Вы должны увидеть это в текстовом выводе на вашем телефоне.

 

Перед продолжением примеров скриптов, важно изучить разные типы событий…

 

 

6         Типы событий

 

Реальные цифровые значения для типов событий можно найти в Справочнике по Объектам.

6.1      etActivate

 

etActivate посылается, когда пользователь впервые щёлкает по скрипту в меню. Если скрипт НЕ использует ни одного из методов RemoteController.Show*, то нет событий, посылаемых скрипту, и меню остаётся активным. Например, такой скрипт может просто запустить какое-то приложение на компьютере, не требующее взаимодействия с пользователем. Чтобы обеспечить интерактивность, скрипт должен обрабатывать событие etActivate.

 

6.2      etBegin, etEnd

 

etBegin посылается, когда скрипт впервые активизируется. EtEnd - когда скрипт деактивизируется. Чтобы сделаться активным, скрипт должен использовать метод RemoteController.Show* в ответ на etActivate

 

6.3      etKeyPress, etKeyRelease, etIntegerInput, etTextInput

 

etKeyPress и etKeyRelease - это события, посылаемые скрипту, когда клавиши нажимаются и отпускаются. Свойство ExecuteData.KeyID  может быть использовано, чтобы определить, какая клавиша нажата/отпущена.

 

etIntegerInput и etTextInput - события, посылаемые, когда пользователем введено значение. Меню посылают 0-базовое целое значение, представляющее индекс элемента, который был выбран.

 

6.4      etNext, etBack

 

etNext и etBack - специальные случаи пользовательского ввода, так как они могут применяться очень разными путями в телефонах. Обычно они связаны с кнопками «OK» и «Назад». etNext и etBack требуют, чтобы вы вызвали метод RemoteController.Show*, если хотите, чтобы скрипт остался активен. Неперехваченные etNext/etBack приведут к тому, что PuppetMaster отобразит предыдущее меню.

 

6.5      etTimer

 

Событие etTimer посылается скрипту периодически, чтобы обеспечить обновление на телефоне с течением времени. Таймеры устанавливаются использованием RemoteController.StartTimer(миллисекунды) и останавливаются использованием RemoteController.StopTimer.

 

 

7         Пример таймера

 

Чтобы позволить 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. Запуск скрипта, приведённого выше, должен привести к отображению системного времени в вашем мобильном телефоне.

 

 

8         Скрипты с множеством состояний

 

Следующий пример даёт идею, как создавать скрипты с множеством состояний. Понимание, как это работает, останется упражнением для читателя.

 

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

 

 

9         Справочник по Объектам

 

9.1      Объект ExecuteData

 

Объект ExecuteData предоставляет информацию, почему был запущен скрипт.

 

9.1.1        Свойства

Имя

Замечания

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

Целое значение для меню, процент ввода

Строковое значение для текстового ввода.

 

9.2      Объект RemoteController

 

Объект RemoteController предоставляет доступ к устройству дистанционного управления.

 

9.2.1      Свойства

Имя

Замечания

CanShowImage

Возвращает true или false в зависимости от возможности устройства к показу изображений.

Store

Это значение используется для хранения данных между многими исполнениями скрипта. См. раздел Устойчивые данные.

ImageWidth

Это ширина дисплея для вывода рисунка в устройстве

ImageHeight

Это высота дисплея для вывода рисунка в устройстве

 

9.2.2      Методы

Имя

Замечания

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

Это значение используется для хранения данных между многими выполнениями скрипта. См. раздел Устойчивые данные.

 

 

10   Режимы

 

Тип режима

События, относящиеся к режиму

Dialog

etKeyPress, etKeyRelease

Text

etKeyPress, etKeyRelease

Percent Input

EtIntegerInput

Progress

etKeyPress, etKeyRelease

Menu

EtIntegerInput

Text Input

EtTextInput

Image

etKeyPress, etKeyRelease

 

 

Комментарии, исправления, вопросы? Пишите:  jeff@lim.com.au