Win32::MSAgent - Interface module for the Microsoft Agent


    use Win32::MSAgent;
    my $agent = Win32::MSAgent->new('Genie');

    my $char = $agent->Characters('Genie');


    my $olenum = $c->AnimationNames();
    my $names = Win32::OLE::Enum->new($olenum);
    my @animations = $names->All();
    foreach my $animation (@animations)
        my $request = $char->Play($animation);
        my $i = 0;
        while (($request->Status == 2) || ($request->Status == 4))
        { $char->Stop($request) if $i >10; sleep(1);  $i++}


Win32::MSAgent allows you to use the Microsoft Agent 2.0 OLE control in your perl scripts. From the Microsoft Website: "With the Microsoft Agent set of software services, developers can easily enhance the user interface of their applications and Web pages with interactive personalities in the form of animated characters. These characters can move freely within the computer display, speak aloud (and by displaying text onscreen), and even listen for spoken voice commands."

Since the MS Agent itself is only available on MS Windows platforms, this module will only work on those.

See the included for some sample code.


In order to use the MSAgent in your scripts, you need to download and install some components. They can all be downloaded for free from for more information on installation of the neccesary components, visit

1. Microsoft Agent Core Components
2. Localized Language Components
3. MS Agent Character files (.acs files)
4. Text To Speech engine for your language
5. SAPI 4.0 runtime

Optionally you can install the Speech Recognition Engines and the Speech Control Panel. The Speech Recognition part of MS Agent is not supported in this version of Win32::MSAgent


See the Microsoft Agent API reference for a complete description of all objects, properties and methods. This module has some extra methods, which are described below.

$agent = Win32::MSAgent->new([charactername])

The constructor optionally takes the name of the character to load. It loads the MS Agent OLE control, connects to it, and if the character name is supplied, it loads that character in the Characters object already. It returns the Win32::MSAgent object itself.


This method returns a list of all installed languages with their countryname. It may look like ('Dutch (Netherlands)', 'Dutch (Belgium)', 'English (United States)', 'Portuguese (Brazil)'). Some speechengines (notably the Fluency TTS engines) don't return a languageID. In this case this language is ignored, because the Microsoft Agent needs a languageID to be able to work.


This method takes a language as returned by GetInstalledLanguages and returns a list of all installed voices with their language. It may look like ('Adult female (Dutch)', 'Microsoft Sam (US English)')


This method takes a language as returned by GetInstalledLanguages and returns the corresponding LanguageID that Win32::SAPI knows. This also converts the 'unknown' that might be returned by GetInstalledLanguages back to a 0.


This method takes a voice as returned by GetInstalledVoices and returns the corresponding ModeID that Win32::SAPI4 knows.


This method checks the harddrive (at default locations) for the existance of Agent Characters and returns their names in an array.


None AFAIK...


Since version 0.6 the module is for a large part incompatible with previous versions. Please check your code before deploying this version!


The MS Agent itself is supported on MS' public newsgroup news://microsoft.public.msagent You can email the author for support on this module.


        Jouke Visser


Copyright (c) 2002-2004 Jouke Visser. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

The full text of the license can be found in the LICENSE file included with this module.