Здравствуйте. Скоро новый год! Вы уже придумали как будете поздравлять своих друзей и подруг. Предлагаю вам неплохой способ, как это можно сделать.
Наверное все из вас при работе в MS Office Word видели лазящую по экрану скрепку, топающего робота или колобка. Это есть агент! Вам никогда не хотелось заставить его делать то чего хотите вы? Можно устроить. По умолчанию в Windows XP (да и более ранних версиях) уже установлен один. Зовут его Merlin. Над ним и будем колдовать. Я кодил на VBScript и Visual Basic.
Открываем блокнот, сохраняем с расширением .VBS и начинаем.
Для начала присвоим объекту msagent ссылку на новый контрол:
Set MsAgent=CreateObject(«Agent.Control.2»)
Потом проверяем готов ли он и активируем
If IsObject(MsAgent) then MsAgent.Connected=true
Далее загружаем персонаж
MsAgent.Characters.Load «merlin»
Если нужен другой персонаж то: MsAgent.Characters.Load «ID персонажа»,«путь к нему»
И присваиваем объекту MyAgent ссылку на агента
Set MyAgent = MsAgent.Characters («merlin»)
Всё объект готов.
Теперь методом Show показываем его на экране.
MyAgent.show
Далее мы можем переместить его в любую точку экрана и даже за него пределы
MyAgent.MoveTo X,Y (где x и y соответственно координаты точки)
Для «показа» речи у агента есть метод Speak «текст»
MyAgent.Speak «Happy New Year»
Имитация думанья Think «текст»
MyAgent.Think «я думаю»
Чтобы выполнить какую-нибудь анимацию метод Play «имя_анимации»
MyAgent.Play «Wave»
У агента имеется коллекция анимаций AnimationNames, чтобы узнать все поддерживаемые данным агентом анимации вбиваем такой код:
For each anim in MyAgent.AnimationNames
Stroka=Stroka & anim & vbCRLF
Next
Msgbox Stroka
Чтобы спрятать агента метод Hide
Все действия агента выполняются асинхронно, наша прога передаёт параметр контролу и продолжает выполняться дальше. Так вот, чтобы агент не выпаливал всё залпом придумано такое:
Set ValReturn= MyAgent.play «Process»
Do while ValReturn.status > 0
Loop
В данном случае ValReturn.Status содержит состояние, как только < 0, то анимация закончена. Если необходимо досрочно закончить анимацию: MyAgent.Stop
Для паузы между действиями в VBS я делал WScript.Sleep [время], а в VB использовал API функцию Sleep из kernel32.dll.
Ещё агент может воспроизводить то что говорит, но для этого надо устанавливать дополнительные элементы. Вообще он способен разговаривать на 11 языках мира. Чтобы заставить его озвучивать надо ещё скачать с сайта майкрософта Text-to-Speech engines, например для русского языка вот отсюда
activex.microsoft.com/activex/controls/agent2/lhttsrur.exe.
После установки этого модуля ваш агент заговорит по-русски. Но потом надо указать язык, на котором он должен будет говорить, иначе агент попытается говорить на языке по умолчанию, который не всегда соответствует нужному. Русский значится как &H0419.;
MyAgent.LanguageId=&H0419.;
Вот пожалуй и всё. Возможно я рассказал не о всех его свойствах и методах, но для того, чтобы послать агента поздравить друга, этого думаю вполне достаточно. А если добавить под его «выход» новогоднюю мелодию, то вообще круто будет!
Дополнительных агентов можно скачать отсюда:
www.rohitab.com/freevoice/gallery.html
11 комментариев
улыбнуло.
вроде так должно быть:
Set ValReturn= MyAgent.play ("Process")
действительно ошибся, должно быть:
Set ValReturn=MyAgent.Play ("Process")
спасибо за поправку
за статью
Того, что выложено тут, вполне достаточно чтобы написать ооочень красивый (а главное компактный и оригинальный) подарок, а остальное уже будет лишним.
Ведь мастерство - это умение с меньшим делать большее!
>>>мелочь, а приятно...
+1