Конференція vbstreets - перегляд теми - microsoft agent 2


файли:
MSAgent.cls - основний клас, який представляє з себе одного персонажа
Timer.frm - прихована форма, яка містить таймер, необхідний для роботи агента
KeyHook.bas - модержіт API-функції, необхідні для вилову гарячих клавіш при введенні голосових команд. Якщо ви не плануєте використовувати голосові команди, його можна не підключати, але тоді потрібно видалити виклики функцій SetWindowsHookEx і UnhookWindowsHookEx з модуля MSAgent.cls (події класу Initialize і Terminate).
MSAgentChecking.bas - абсолютно самостійний модуль, який можна не підключати. Він містить функцію AgentIsInstalled, яка перевіряє наявність необхідних бібліотек на комп'ютері користувача.

Всі властивості і методи Об'єктна модель, за винятком колекції Commands,
і об'єктів AudioOutput, SpeechInput реалізовані в класі безпосередньо,
так як їх, на мій погляд, не багато. Колекція Commands і перераховані
вище об'єкти доступні через однойменні властивості класу.

Метод Get об'єкта Character в цьому класі не реалізований, тому що він у мене
не працював чомусь. Замість Get пропонується використовувати ме-
тоди Play, Speak і Move. Масив імен анімацій для методу Play поточного
персонажа можна отримати з масиву (властивості) AnimationNames після
виклику методу Load.

У зв'язку з тим, що метод Get не реалізований я також видалив обробники
подій IdleStart, IdleComplete об'єкта MyAgent. Їх можна додати
стандартним способом.

У зв'язку з тим, що Microsoft Agent виконує всі анімації асинхронно (НЕ
модально), і іноді ці анімації підвисають, я в кожен анімаційний метод
додав виклик процедури WaitRequestComplete, яка не дозволяє анімації
виконуватися довше ніж зазначено в змінної nMaxWaitingTime (устанавлива-
ється в процедурі Class_Initialize або пізніше через властивість MaxWaitingTime.
Див. Також процедуру WaitRequestComplete і властивість MaxWaitingTime).
Крім того, зверніть увагу на метод Wait, який дозволяє двом персона-
жам розмовляти один з одним, чекаючи при цьому закінчення промови аппонента.

'Далі йде код вашої програми. Не забувайте, що
'Все анімації MS Agent виконує асинхронно (НЕ модально),
'Тому потрібно тримати якусь модальну форму відкритої.

EndOfSubMain:
Set Merlin = Nothing
End Sub

Схожі статті