PuppetMaster Guide - VBScript Actions erstellen

 

 

Bitte beachten sie, dass im Zuge der Weiterentwicklung von PuppetMaster Änderungen und Erweiterungen am VB Script interface durchgeführt werden.

1       Einleitung

 

Dies ist eine Anleitung zum Erstellen von VBScript Actions mit PuppetMaster. PuppetMaster ist erhältlich auf http://www.lim.com.au/PuppetMaster

 

Einer der Möglichkeiten, PuppetMaster an die eigenen Bedürfnisse anzupassen, ist mit VBScript. tatsächlich sind einige der Standardanwendungen in PuppetMaster (z.B. PowerPoint, iTunes) komplett in VBScript geschrieben.

 

Dies ist kein VBScript Tutorial – es gibt unzählige Anleitungen zu VBScript's Syntax und Features im Internet. Dies ist lediglich eine kurze Anleitung, wie man VBScript zur Kontrolle von PuppetMaster einsetzen kann.

 

 

2       Nicht-Interaktive Skripte

 

Ein Beispiel.

 

Set PowerPointApp = CreateObject("PowerPoint.Application")

PowerPointApp.SlideShowWindows(1).View.Next

 

Dieses Skript veranlasst eine PowerPoint Präsentation dazu, zur nächsten Seite zu wechseln. Zum Starten öffnen Sie in PuppetMaster Preferences -> Menus -> Add Item

Visual Basic Script auswählen, Name aussuchen, (z.B. “Nächste Seite”) und den Skriptcode einfügen. OK klicken.

 

Das Skript erscheint dann unter Available items. Um es auf dem Handy zu benutzen muss es zuerst mit der Maus auf die linke Seite gezogen werden, wenn Ihr Handy mit PuppetMaster verbunden ist erscheint es dort sofort.

 

Probieren Sie es aus! Laden und starten Sie eine PowerPoint Präsentation und klicken Sie auf “Nächste Seite” auf ihrem Handy.

 

Dies zeigt wie einfach nicht-interaktive Skripte realisiert werden können.

 

 

3       Hello World Skript

 

Erstellen Sie ein neues VB Script namens “Hello World”. Fügen Sie folgenden Code ein

 

Const etActivate = 1

If ExecuteData.Type = etActivate Then

RemoteController.ShowDialog "Hello World"

End If

 

Wenn Sie dieses Skript auf Ihrem Handy benutzen, erscheint dort “Hello World”. Die OK oder Zurück Taste bringt Sie ins übergeordnete Menü zurück.

 

Wenn PuppetMaster das VBScript aufruft, werden zwei Objekte bereitgestellt – ExecuteData und RemoteController. ExecuteData beinhaltet Informationen zum Aufruf des Skripts.

 

Wenn ein Skript aus dem Menü aufgerufen wird, wird ein etActivate Ereignis an das Skript gesendet. Wenn das Skript z.B. via RemoteController keine Anzeige auslö ist das Skript sofort beendet. Wenn allerdings eine Ausgabe mit RemoteController ausgelöst wird, so gilt das Skript als ‘aktiv’ und wird in Zukunft aufgerufen.

 

RemoteController bietet Funktionen zur Interaktion mit dem Handy. In diesem Beispiel zeigen wir einfach den Text “Hello World” auf dem Handy an.

 

 

4       Eingabebehandlung

 

Wenn der Benutzer eine Taste drückt ruft PuppetMaster das Skript mit dem ExecuteData.Type Flag auf etKeyPress gesetzt auf. Probieren Sie folgendes Skript aus

 

Const etActivate = 1, etKeyPress = 4

Select Case ExecuteData.Type

Case etActivate

RemoteController.ShowDialog "Press a key"

Case etKeyPress

RemoteController.ShowDialog "You pressed " & ExecuteData.KeyID

End Select

 

If you look at how this script works, you’ll notice that the actual key pressed is provided by part of ExecuteData

 

 

5       Daten speichern

 

Manchmal soll ein Skript ‘wissen was vorher passiert ist’. Das RemoteController Objekt hat ein “Store” Element, das Sie auf einen beliebigen Wert (oder Array von Werten) setzen können und dessen Inhalt über mehrere Aufrufe erhalten bleibt. Probieren Sie folgendes Beispiel

 

Const etActivate = 1, etKeyPress = 4

Select Case ExecuteData.Type

Case etActivate

RemoteController.ShowDialog "Press a key"

 RemoteController.Store = 0

Case etKeyPress

 RemoteController.Store = RemoteController.Store + 1

RemoteController.ShowDialog RemoteController.Store & ": You pressed " & ExecuteData.KeyID

End Select

 

Der Store wird im etActivate Teil mit 0 initialisiert und mit jedem Tastendruck inkrementiert. Dies sollte in der Textausgabe des Handys angezeigt werden.

 

Bevor wir mit weiteren Beispielen fortfahren lohnt sich ein kurzer Überblick über die verschiedenen Ausführungsobjekte…

 

6       Ausführungsobjekte

 

Die numerischen Werte für die Ausführungsobjekte sind in der Objektreferenz aufgeführt.

6.1     etActivate

 

etActivate wird ausgelöst wenn das Skript erstmalig aus dem Menü aufgerufen wird. Wenn das Skript KEINE RemoteController.Show* Methode benutzt werden keine weiteren Nachrichten gesendet und das Menü bleibt aktiv. Interaktive Skripte müssen die etActivate Nachricht behandeln.

 

6.2     etBegin, etEnd

 

etBegin wird bei erstmaliger Aktivierung des Skripts gesendet. etEnd wird gesendet wenn das Skript inaktiv wird. Aktive Skripte müssen eine RemoteController.Show* Funktion als Antwort auf etActivate benutzen

 

6.3     etKeyPress, etKeyRelease, etIntegerInput, etTextInput

 

etKeyPress und etKeyRelease werden gesendet wenn eine Taste gedrückt und losgelassen wird. Um rauszufinden, welche Taste gedrückt/losgelassen wurde, kann die ExecuteData.KeyID Eigenschaft verwendet werden.

 

Wenn der Benutzer eine Eingabe gemacht hat werden etIntegerInput bzw. etTextInput versendet. Menüs versenden 0-basierte Zahlenwerte, die dem Index der Menüauswahl entsprechen.

 

6.4     etNext, etBack

 

etNext und etBack sind Sonderfälle der Benutzereingabe, da diese Tasten auf unterschiedlichen Handys unterschiedlich behandelt werden. Im Allgemeinen entsprechen sie der “OK” und “Zurück” Taste. etNext und etBack erwarten einen RemoteController.Show* Aufruf wenn da Skript aktiv gehalten werden soll, ansonsten wird PuppetMaster das übergeordnete Menü anzeigen.

 

6.5     etTimer

 

Die etTimer Nachricht wird periodisch an das Skript gesendet und kann für zeitbasierte Updates des Handys verwendet werden. Timer werden mit RemoteController.StartTimer(Millisekunden) gestartet und mit RemoteController.StopTimer() beendet.

 

7       Timer Beispiel

 

Um PuppetMaster zu veranlassen, Ihr Skript in periodischen Zeitabständen aufzurufen, muss die RemoteController.StartTimer Routine verwendet werden. Beim Beenden des Skripts sollte der Timer ausserdem entsprechend beenden werden. Das folgende Beispiel benutzt die in VBScript eingebaute Time Funktion.

 

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 erwartet einen Parameter in Millisekunden, die der Zeitspanne zwischen den etTimer Nachrichten entspricht. Der Aufruf des obigen Beispiels sollte die Systemzeit auf dem Handy anzeigen.

 

8       Multi-Zustand Skripte

 

Das folgende Beispiel soll veranschaulichen, wie Skripte mit mehreren Zuständen geschrieben werden können. Sie sollten nun selbst in der Lage sein rauzufinden, wie dies funktioniert.

 

Const etActivate = 1, etIntegerInput = 6, etNext = 7, etBack = 9

Const stMenu = 0, stDialog = 1, stPercentInput = 2

 

Sub ShowMenu

 RemoteController.Store(0) = stMenu

 RemoteController.ShowMenu "MultiState Example", array("Show Dialog", "Show Percent Input")

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 "Current Percent " & RemoteController.Store(1)

    RemoteController.Store(0) = stDialog

  Case 1

    RemoteController.ShowPercentInput "Enter Percent", 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 ' Just give percent some starting value

 ShowMenu

End If

 

Select Case RemoteController.Store(0)

Case stMenu

 HandleMenu

Case stDialog

 HandleDialog

Case stPercentInput

 HandlePercentInput

End Select

 

9       Objektreferenz

 

9.1     ExecuteData Objekt

 

Das ExecuteData Objekt hält Informationen zum Skriptaufruf bereit.

 

9.1.1      Eigenschaften

Name

Hinweise

Type

Beinhaltet den Typ, folgende Typen sind derzeit definiert:

 etActivate = 1

 etBegin = 2

 etEnd = 3

 etKeyPress = 4

 etKeyRelease = 5

 etIntegerInput = 6

 etBack = 7

 etTimer = 8

 etNext = 9

 etTextInput = 10

Weitere Informationen hierzu im Ausführungsobjekte Kapitel

KeyID

String entsprechend der gedrückten Taste.

 “<” – Pfeil links

 “>” – Pfeil rechts

 “^” – Pfeil hoch

 “v” – Pfeil runter

 “0” – “9”, “#, “*” – Keypad

 “u”, “d” - + und – Tasten auf Sony Ericsson Handys

 “f” – Menü Taste

 “c” – Löschen Taste (nicht auf allen Handys verfügbar)

Input

Integerwert für Menüs, Prozenteingabe

String für Texteingabe

 

9.2     RemoteController Objekt

 

Das RemoteController Objekt bietet Zugriff auf das Handy.

 

9.2.1    Eigenschaften

Name

Hinweise

CanShowImage

Testet die Fähigkeit des Handys, Bilder anzeigen zu können und liefert dementsprechend true oder false zurück.

Store

Dieser Wert kann dazu benutzt werden, Daten über Skriptaufrufe hinweg zu speichern. Siehe Kapitel Daten speichern.

ImageWidth

Die Bildbreite des Handys

ImageHeight

Die Bildhöhe des Handys

 

9.2.2    Methoden

Name

Hinweise

ShowDialog Text

Zeigt Text auf dem Handy an

ShowImage ImageFileName, ImageFileType, TimeBeforeHighQuality

ImageFileName muss der komplette Pfad zu einem unterstützten Bildtyp sein.

TimeBeforeHighQuality steuert das aktive Runterrechnen des Bildes. Wenn in den letzten TimeBeforeHighQuality Millisekunden ein anderes Bild angezeigt wurde, dann wird das Bild auf eine niedrigere Qualitätsstufe heruntergerechnet, um Interaktivität zu gewährleisten. Um Bilder immer mit höchster Qualität anzuzeigen, geben sie 0 an.

Bilder mit anderen Ausmassen als ImageWidth und ImageHeight werden vor dem Anzeigen dem Handy entsprechend skaliert.

Unterstützte Bildtypen sind derzeit: BMP, JPG, PCX, TGA

ShowMenu Title, MenuArray

MenuArray ist ein Array von Strings. Sendet 0-basierte etIntegerInput Eingaben

ShowPercentInput Title, StartingPercent

Zeigt eine Prozenteingabe auf dem Handy an. etIntegerInput Nachrichten werden bei jeder Veränderung des Wertes generiert.

ShowProgress Text

Zeigt einen Fortschrittsdialog an.

ShowSortedMenu Title, MenuArray

Wie ShowMenu, sortiert vor der Anzeige allerdings nach Namen.

ShowText Title, Text

Zeigt Text auf dem Handy an. Wenn der Text zu gross für den Handybildschirm ist kann der Benutzer mit den Hoch/Runter Pfeiltasten scrollen

ShowTextInput Title, InitialText

Erlaubt dem Benutzer, Text mit T9 Unterstützung einzugeben (wenn vom Handy unterstützt).

Store

Dieser Wert kann dazu benutzt werden, Daten über Skriptaufrufe hinweg zu speichern. Siehe Kapitel Daten speichern.

 

 

10  Modi

 

Modus Typ

dem Modus zugeordnete Ereignisse

Dialog

etKeyPress, etKeyRelease

Text

etKeyPress, etKeyRelease

Percent Input

EtIntegerInput

Progress

etKeyPress, etKeyRelease

Menu

EtIntegerInput

Text Input

EtTextInput

Image

etKeyPress, etKeyRelease

 

 

Kommentare, Verbesserungen, Fragen? Mailen Sie an: jeff@lim.com.au