Microsoft Agents - Animierte Comicfiguren im Einsatz

Veröffentlicht: 28. Nov 2005
Von Mathias Schiffer

Die Microsoft Newsgroups sind eine Quelle schier unerschöpflichen Wissens, das nahezu auf Knopfdruck abrufbar ist: Hunderte deutschsprachige Entwickler vom Einsteiger bis zum Profi treffen sich hier täglich virtuell, um Fragen zu stellen oder zu beantworten. Auch themennahe Probleme, Ansichten und Konzepte werden miteinander diskutiert. Sie kennen die Microsoft Newsgroups noch nicht? Detaillierte Information für Ihre Teilnahme finden Sie auf der Homepage der Microsoft Support Newsgroups.

Diese Kolumne greift regelmäßig ein besonders interessantes oder häufig nachgefragtes Thema aus einer der Entwickler-Newsgroups auf und arbeitet es aus.

Aus der Visual Basic Newsgroup microsoft.public.de.vb:

Ich möchte in Visual Basic 6 animierte Charaktere zur Unterstützung der Anwender einsetzen, um neue Features der Benutzeroberfläche zu erklären. Ich habe da mal eine Zaubererfigur gesehen - kann ich die benutzen?

Sie heißen Merlin, Genie, Peedy und Robby und verstecken sich im Windows-Unterverzeichnis msagent - sie sind die Microsoft Agents. Microsoft Agents sind animierte Comicfiguren, die die Interaktion mit dem Endanwender unterstützen sollen. Dafür bieten sie allerhand possierlich animierte Bewegungsabläufe, die kombiniert mit Comic-Sprechblasentexten oder gar Sprachausgabe ihr kleines Eigenleben auf dem Computer führen. Für ältere Windows-Versionen (Windows 95, Windows 98/SE) stehen die kleinen Helferlein auf der Microsoft Agent Webseite zum nachträglichen Download bereit.

Peedy, Merlin, Genie und Robby
Abbildung 1: Peedy, Merlin, Genie und Robby

Das Beste daran: Sie können diese Figuren auch in Ihren eigenen Anwendungen einsetzen. Diese Verwendung ist kostenlos, erfordert jedoch eine Distributionslizenz, die Sie ebenso wie eine CAB-Datei für Ihr Setup-Programm über die Agent Webseite erhalten können. Eine Deinstallation der Microsoft Agents von der Zielmaschine ist hingegen nicht vorgesehen.

Die Ansteuerung der Agenten ist dank Agent-Steuerelement ein Kinderspiel: Fügen Sie Ihrer Steuerelementliste das "Microsoft Agent Control 2.0" hinzu (AgentCtl.dll im Agent-Verzeichnis) und platzieren Sie eine Instanz davon auf Ihrer Form - standardmäßig erhält das Steuerelement den Namen Agent1.

Grundsätzlich können Sie eine oder mehrere Agent-Figuren gleichzeitig einsetzen. Hierfür stellt das Agent-Steuerelement die Characters-Collection zur Verfügung, die aktuell geladene Charaktere repräsentiert. Ein neuer Agent wird über deren Load-Methode geladen. Nötig sind dabei der Name der Figur sowie der Pfad zur Agentendatei der Figur (Sie finden die Charaktere standardmäßig im Windows-Unterverzeichnis \msagent\chars), für die wohl bekannte Zaubererfigur namens "Merlin" etwa "Merlin.acs":

Agent1.Characters.Load "Merlin", "Merlin.acs"

Hiermit wird der Characters-Collection des Agent-Controls ein Objekt vom Typ IAgentCtlCharacterEx hinzugefügt, über das die geladene Figur angesprochen werden kann.

Dim AgentMerlin As AgentObjectsCtl.IAgentCtlCharacterEx
  
Set AgentMerlin = Agent1.Characters.Item("Merlin")

Über die Objektvariable AgentMerlin können Sie nun sämtliche Steuerungsbefehle an die Figur absetzen. Einfachste Befehle sind das Bewegen und die Darstellung der Figur:

With AgentMerlin
  .LanguageID = &H407 ' Deutsch (Englisch: &H409)
  .MoveTo 300, 200 ' Pixelmaße
  .Show
End With

Agenten können mithilfe der GestureAt-Methode in eine bestimmte Richtung zeigen, die durch Pixel-Koordinaten auf dem Bildschirm angegeben wird. Mithilfe der Speak-Methode kann dann Text ausgegeben werden, der bei installierten Sprachausgabe-Voraussetzungen sowohl den anzugebenden Comicblasen-Text wie auch daraus synthetisierte Sprache ausgibt. Hierbei werden die Einstellungen der LanguageID-Eigenschaft ebenso berücksichtigt wie z.B. auch beim Kontextmenü der Agent-Charaktere.

Im folgenden Beispiel (mit zusätzlichen Gimmicks) erscheinen Merlin und Peedy, zeigen aufeinander und stellen sich gegenseitig vor:

Dim AgentMerlin As AgentObjectsCtl.IAgentCtlCharacterEx
Dim AgentPeedy  As AgentObjectsCtl.IAgentCtlCharacterEx
Dim WaitToTalk As AgentObjectsCtl.IAgentCtlRequest
  
  ' Merlin laden und anzeigen:
  ' -------------------------
  Agent1.Characters.Load "Merlin", "Merlin.acs"
  Set AgentMerlin = Agent1.Characters.Item("Merlin")
  
  With AgentMerlin
  
    .LanguageID = &H407 ' Deutsch (Englisch: &H409)
    .MoveTo 300, 200 ' Pixelmaße
    .Show
    
    ' Merlin stellt Peedy vor:
    .GestureAt 600, 150 ' Peedys Position (siehe unten)
    Set WaitToTalk = .Speak("Dort ist Peedy.")
    
  End With
        
  ' Peedy laden und anzeigen:
  ' -------------------------
  Agent1.Characters.Load "Peedy", "Peedy.acs"
  Set AgentPeedy = Agent1.Characters.Item("Peedy")
  
  With AgentPeedy
  
    .LanguageID = &H407 ' Deutsch (Englisch: &H409)
    .MoveTo 600, 250 ' Pixelmaße
    .Show
    
    ' Peedy stellt Merlin vor:
    .GestureAt 300, 200 ' Merlins Position
    
    ' Peedy denkt kurz nach:
    .Think "Wie heisst der nochmal? Aaah, ja!"  ' Denkblase
    
    ' Peedy soll erst sprechen, wenn Merlin zu Ende gesprochen hat:
    .Wait WaitToTalk
    .Speak "Dort ist Merlin." ' Sprechblase + ggf. Sprachausgabe
  
  End With

Peedy bemüht sich redlich...
Abbildung 2: Peedy bemüht sich redlich...

Besonders unterhaltsam bei den Microsoft Agents sind auch kleine Animationen, die automatisch im Wechsel abgespielt werden, wenn die Agenten eine Weile lang "nichts zu tun" hatten. Diese wie auch umfassendere Animationen können nämlich gezielt abgerufen werden: Um sie abzuspielen, wird die Play-Methode des betroffenen Charakters verwendet. Die Methode nimmt den Namen einer Animation als String entgegen. Dabei unterstützt nicht jeder Charakter jede denkbare Animation (Charaktere für Microsoft Agent können zudem auch selber erstellt werden und beliebig eingeschränkt agieren). Mit dem folgenden Sourcecode können Sie die für die Play-Methode notwendigen Namen der von einem Agent-Charakter angebotenen Animationen ermitteln:

' Ausgabe der Namen aller Animationen, die von dem
' Agenten angeboten werden:
Dim Animation As Variant
  
For Each Animation In AgentMerlin.AnimationNames
  Debug.Print Animation
Next Animation

Möchten Sie das Abspielen einer Animation unterbrechen (während des Abspielens einer Animation kann ein Microsoft Agent beispielsweise nicht sprechen), so verwenden Sie dafür die Interrupt-Methode. Auch hierzu ein letztes Beispiel, in dem Genie und Robby sich zu einem weniger herzlichen Plausch treffen:

Dim AgentGenie  As AgentObjectsCtl.IAgentCtlCharacterEx
Dim AgentRobby As AgentObjectsCtl.IAgentCtlCharacterEx
Dim WaitToTalk  As AgentObjectsCtl.IAgentCtlRequest
Dim InterruptableRequest As AgentObjectsCtl.IAgentCtlRequest
  
  ' Robby laden und anzeigen:
  ' -------------------------
  Agent1.Characters.Load "Robby", "Robby.acs"
  Set AgentRobby = Agent1.Characters.Item("Robby")
  
  ' Robby stellt fest, dass es heute viel zu tun gibt, und fängt zu arbeiten an:
  
  With AgentRobby
    .LanguageID = &H407 ' Deutsch (Englisch: &H409)
    .MoveTo 300, 200 ' Pixelmaße
    .Show
    Set WaitToTalk = .Speak("Heilige Öldose, mächtig was am Start heute.")
    Set InterruptableRequest = .Play("Processing") ' Loop von "Process"
  End With
  
  ' Genie laden und anzeigen:
  ' -------------------------
  Agent1.Characters.Load "Genie", "Genie.acs"
  Set AgentGenie = Agent1.Characters.Item("Genie")
  
  With AgentGenie
    .LanguageID = &H407 ' Deutsch (Englisch: &H409)
    .MoveTo 600, 250 ' Pixelmaße
    .Show
    ' Genie fragt nach, was denn bei Robby so los ist - und stört ihn dabei
    .Wait WaitToTalk
    Set WaitToTalk = .Speak("Was machst Du denn da?")  ' Sprechblase + ggf. Sprachausgabe
    .Interrupt InterruptableRequest ' Robbys Tätigkeit wird unterbrochen
  End With
  
  ' Robby will in Ruhe gelassen werden
  
  With AgentRobby
    .Play "LookRight"  ' Links/rechts aus Sicht des Agenten!
    .Wait WaitToTalk
    Set WaitToTalk = .Speak("Stör mich nicht, ich arbeite.")
    ' Robby arbeitet weiter.
    .Play "Processing"
  End With
  
  ' Genie stört nicht weiter und geht
  
  With AgentGenie
    .Wait WaitToTalk
    .Speak "Na dann, alter Weißblechmuckel - man sieht sich..."
    .Hide
  End With

Fertig ist der Mini-Comicstrip am Bildschirm!

Die Microsoft Agenten bieten noch viele weitere Möglichkeiten - darunter sogar die, Agents unter gegebenen Voraussetzungen auf Webseiten einzusetzen. Zur Beantwortung der Ursprungsfrage soll diese kurze Einführung jedoch ausreichen.

Wesentlich umfassendere Informationen erhalten Sie auf der Microsoft Agent Website. Hier finden Sie auch wichtige Hinweise zu technologischen Voraussetzungen, Lizenzinformationen zur Weitergabe, Downloadmöglichkeit für Sprachsynthese-Pakete und Agent-Charaktere. Besonders wichtig für Ihre nächsten Schritte ist die so genannte Agent SDK Dokumentation, eine HTML-Hilfedatei mit den wichtigsten Entwickler-Informationen zum Microsoft Agent.

Und wenn die vier vorgefertigten knuffigen Begleiter Ihnen einmal zu langweilig werden - bemühen Sie doch einmal die Suchmaschine Ihres Vertrauens: Vielerorts finden Sie kostenlos weitere Charaktere für die Microsoft Agent-Technologie, deren Animationsmöglichkeiten sich per Code über deren AnimationNames (siehe oben) ermitteln lassen.

Mathias Schiffer widmet sich als freier Technologievermittler und Entwickler großen Projekten ebenso wie arbeitserleichternden Alltagslösungen. Seit Jahren gibt er sein Wissen und seine Erfahrungen in unzähligen Publikationen und Beratungen auch an andere Entwickler und Entscheider weiter. Sie erreichen Mathias Schiffer per E-Mail an die Adresse Schiffer@mvps.org.


Anzeigen: