Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
 Аватар для Argus19
1732 / 476 / 78
Регистрация: 24.09.2017
Сообщений: 2,573
Записей в блоге: 27

Изоляция MS Agent 2.0

22.01.2021, 19:20. Показов 4710. Ответов 44
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написал тестовую программу:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Dim CharPath As String
Dim Voice As SpVoice
Dim Token As ISpeechObjectToken
Dim Character As IAgentCtlCharacterEx
 
Private Sub Form_Load()
CharPath = App.Path & "\MSAgent\chars\girlsa.acs"
    Set Voice = New SpVoice
    Set Voice = CreateObject("sapi.spvoice")
 
 Agent1.Characters.Load "CharacterID", CharPath
       Set Character = Agent1.Characters("CharacterID")
   Character.Show
   Sleep (2000)
        Voice.Speak "Hello!"
        Character.Hide
 
End Sub
Разместил папку с файлами MS Agent 2.0 в папке с программой. За образец взял файл манифеста от The Trick для dx8vb.dll. Для работы требуется AgentCtl.dll, т.к. при пробном запуске на Win10, требуется именно она. Нашёд только два из требуемых трёх идентификаторов. Получилось так:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity
        version="1.0.0.0"
        name="3DFirTree"
        type="win32"
    />
    <description>3DFirTree by the trick</description>
   
 
    <file name="dx8vb.dll">
        <comClass 
             clsid="{D45FD31B-5C6E-11D1-9EC1-00C04FD7081F}" 
             threadingModel="Both"                   
             tlbid="{AABFB2BB-49A2-4C39-8622-0DBE16C4161B}"   
             progid="DIRECT.DirectX8.0"                   
        />
        <typelib 
             tlbid="{F5BE8BC2-7DE6-11D0-91FE-00C04FD701A5}" 
             version="1.0"
         helpdir=""         
        />
 
    </file>
 
    <!-- UAC privileges -->
 
    <trustInfo>
        <security>
            <requestedPrivileges>
                <requestedExecutionLevel
                    level="asInvoker"
                    uiAccess="false"
                />
            </requestedPrivileges>
        </security>
    </trustInfo>
 
</assembly>
Не понимаю, где взять значение tlbid= и progid?

Добавлено через 4 часа 9 минут
Использовал программу:
https://github.com/froque/Make-My-Manifest
Получил папку со своей программой и нужными для её работы библиотеками. Запустил программу на другом компьютере и получил сообщение "File not found!" без указания имени отсутствующего файла.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.01.2021, 19:20
Ответы с готовыми решениями:

Изоляция в транзакции
Добрый день. Вопрос простой. Есть некая последовательность: 1. Запрос на получение количество строк в одной из таблиц 2. Insert в...

Изоляция программы
итак, есть программа(.exe), необходимо её запустить, да только так, чтобы при её попытке доступа в интернет, обращения к консоли, изменения...

Blazor: изоляция CSS
Официально не поддерживается и даже в план не поставлено: https://github.com/aspnet/AspNetCore/issues/10170 Из костыльных решений...

44
 Аватар для Pro_grammer
6807 / 2840 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
26.01.2021, 14:03
Студворк — интернет-сервис помощи студентам
Упрощённая инструкция по установке MS Agent 2.0 на систему с Win10( а так же 8, 8.1):

Архив распаковать в папку с установленной системой, предположительно это "C:\Windows", но бывают варианты
- должно получится C:\Windows\MSAgent\. В этой папке создать папку CHARS и туда скопировать любой персонаж, например Merlin.acs (размер его 2.07 Mb, потому в архив я его не положил). В интернете много, можно в эту папку скопировать несколько персонажей.
Найти файл C:\Windows\MSAgent\MSAgent.reg и запустить его на выполнение.
Всё! У вас в системе установлен MS Agent 2.0, можно писать программы с ним и запускать готовые.
Вложения
Тип файла: zip MSAgent.zip (366.5 Кб, 10 просмотров)
1
 Аватар для Argus19
1732 / 476 / 78
Регистрация: 24.09.2017
Сообщений: 2,573
Записей в блоге: 27
26.01.2021, 23:40  [ТС]
У персонажей MSAgenta есть несколько видов анимации: перемещение, вручение подарков, размышление, чтение и запись в книгу. Т.е. нужно несколько анимаций. Я разобрался как использовать SAPI 5, поэтому, не надо использовать "компьютерные" голоса MSAgent.
Идея в том, чтобы каждому внуку дать своего персонажа, который будет задавать вопросы, получать ответы из текстового поля и комментировать их, сопровождая действиями: одобрять, расстраиваться при неправильном ответе, совершать магические действия и т.д. Программа создания персонажа от "Microsoft" не имеет возможности редактировать уже имеющий персонаж, чтобы попытаться вытащить анимации. Сведений о формате фала .acs в интернете не нашёл.
0
Модератор
10069 / 3914 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
26.01.2021, 23:54
С помощью этой утилиты извлекаются все ресурсы из файла.
Далее уже с помощью слоеного окна (LWA_COLORKEY) делается окно в виде персонажа.
1
 Аватар для Argus19
1732 / 476 / 78
Регистрация: 24.09.2017
Сообщений: 2,573
Записей в блоге: 27
27.01.2021, 00:20  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
С помощью этой утилиты извлекаются все ресурсы из файла.
Спасибо. Я опять плохо искал.
Цитата Сообщение от The trick Посмотреть сообщение
с помощью слоеного окна (LWA_COLORKEY) делается окно в виде персонажа.
Как я понимаю, слово "слоёное", подразумевает несколько слоёв, в каждое из которых загружено изображение?
0
Модератор
10069 / 3914 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
27.01.2021, 00:51
Цитата Сообщение от Argus19 Посмотреть сообщение
Как я понимаю, слово "слоёное", подразумевает несколько слоёв, в каждое из которых загружено изображение?
Нет. Слоеное это значит имеющее стиль WS_EX_LAYERED, которое позволяет сделать окно прозрачным/полупрозрачным. В данном случае кадры отрисованы на однородном фоне и его можно использовать как хромакей (LWA_COLORKEY), т.е. сделать фон прозрачным.
0
 Аватар для Argus19
1732 / 476 / 78
Регистрация: 24.09.2017
Сообщений: 2,573
Записей в блоге: 27
27.01.2021, 01:05  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
В данном случае кадры отрисованы на однородном фоне и его можно использовать как хромакей (LWA_COLORKEY), т.е. сделать фон прозрачным.
Т.е. создаём прозрачное окно и в нём меняем изображения по таймеру?
0
Модератор
10069 / 3914 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
27.01.2021, 01:13
Цитата Сообщение от Argus19 Посмотреть сообщение
Т.е. создаём прозрачное окно и в нём меняем изображения по таймеру?
В самом простом случае - да.
0
 Аватар для Argus19
1732 / 476 / 78
Регистрация: 24.09.2017
Сообщений: 2,573
Записей в блоге: 27
27.01.2021, 01:16  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
В самом простом случае - да.
Ясно.
Распаковал персонаж, Прошёлся по интернету, сохранил ссылки. Завтра начну.
0
 Аватар для Pro_grammer
6807 / 2840 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
27.01.2021, 11:35
Цитата Сообщение от Argus19 Посмотреть сообщение
Распаковал персонаж
Можно ещё использовать подходящие GIF ки, тоже раскладываешь по кадрам анимацию. Я так свои .acs делал с редакторе, рисовать тоже не умею
0
 Аватар для Argus19
1732 / 476 / 78
Регистрация: 24.09.2017
Сообщений: 2,573
Записей в блоге: 27
27.01.2021, 12:50  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Можно ещё использовать подходящие GIF ки
Там можно и раскадровку .PNG использовать.
У меня кое-какой прогрессик. Сделал окно и загружаю первый кадр анимации. Надо сообразить, либо как использовать "родной" .acd, или сделать из него свой, освободив от лишней информации.
Неудобство в необходимости держать бработку события таймера
Visual Basic
1
2
3
4
Public Sub TimerProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal nIDEvent As Long, _
            ByVal dwTime As Long)
 
End Sub
в модуле.
0
Модератор
10069 / 3914 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
27.01.2021, 14:30
Цитата Сообщение от Argus19 Посмотреть сообщение
Неудобство в необходимости держать бработку события таймера
Зачем?
0
 Аватар для Argus19
1732 / 476 / 78
Регистрация: 24.09.2017
Сообщений: 2,573
Записей в блоге: 27
27.01.2021, 18:14  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Зачем?
1). Потому, что в коде формы на него ругается IDE;
2). А, вот тут, интереснее. Каждый кадр анимации показывается определённое время, из чего следует, что надо загрузить в окно первое изображение, запустить таймер, дождаться срабатывания (это тоже надо как-то организовать, возможно через нелюбимое всеми DoEvents), загрузить следующее изображение, установить новое значение таймера и так до окончания раскадровки выбранной анимации. Если таймер сработал, то это не значит, что он остановился. Тогда "приговорить его к расстрелу": после срабатывания KillTimer, после загрузки кадра SetTimer.
Жестоко. ЧТо-то я тут застрял. Как поступить правильнее?

Добавлено через 39 минут
Совсем забыл, что и без таймера можно обойтись. Проще использовать функцию Sleep.
0
Модератор
10069 / 3914 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
27.01.2021, 19:21
Цитата Сообщение от Argus19 Посмотреть сообщение
Потому, что в коде формы на него ругается IDE;
Есть компонент таймер.

Цитата Сообщение от Argus19 Посмотреть сообщение
Каждый кадр анимации показывается определённое время, из чего следует, что надо загрузить в окно первое изображение, запустить таймер, дождаться срабатывания (это тоже надо как-то организовать, возможно через нелюбимое всеми DoEvents), загрузить следующее изображение, установить новое значение таймера и так до окончания раскадровки выбранной анимации. Если таймер сработал, то это не значит, что он остановился. Тогда "приговорить его к расстрелу": после срабатывания KillTimer, после загрузки кадра SetTimer.
Жестоко. ЧТо-то я тут застрял. Как поступить правильнее?
Нет. Просто задаешь интервал таймеру каждый кадр и меняешь изображение.
0
 Аватар для Argus19
1732 / 476 / 78
Регистрация: 24.09.2017
Сообщений: 2,573
Записей в блоге: 27
27.01.2021, 20:19  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Есть компонент таймер.
Можно и так. Проблема с ожиданием события. Пока не соображу. Но до этого пока далеко.
У разных персонажей разное количество анимаций с отличающими названиями и разным количеством кадров. Каждый раз, при вызове определённой анимации, обращаться к файлу .acd дело неблагодарное. Думаю, лучше выбрать из него необходимые анимации и записать в соответствующие массивы, которые потом использовать в функциях собственной анимации. И пока не понял, как использовать параметр OffsetY = 2. Если это смещение по оси Y, то оно нарастающее от изображения к изображению, или фиксированное?
0
 Аватар для Argus19
1732 / 476 / 78
Регистрация: 24.09.2017
Сообщений: 2,573
Записей в блоге: 27
28.01.2021, 18:48  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Я так свои .acs делал с редакторе
Здесь:
DefineFrame
Duration = 10
DefineImage
Filename = "Images\0000.bmp"
EndImage
всё понятно. А вот тут:
DefineFrame
Duration = 5
DefineImage
Filename = "Images\0292.bmp"
EndImage
DefineImage
Filename = "Images\0294.bmp"
OffsetY = 4
EndImage
EndFrame
Не понятно. У второго изображения отсутствует время показа.
0
 Аватар для Pro_grammer
6807 / 2840 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
28.01.2021, 19:05
Цитата Сообщение от Argus19 Посмотреть сообщение
Не понятно. У второго изображения отсутствует время показа.
Я же не руками делал
Есть специальный софт от Мелклмягких, редактор этих самых Агентов.
Он же визуальный, там всё понятно, настраиваешь только те анимации, которые нужны, потом компиляция и все дела!
А вот декомпиллировать готовые не приходилось, потому что там внутри понятия не имею.
0
 Аватар для Argus19
1732 / 476 / 78
Регистрация: 24.09.2017
Сообщений: 2,573
Записей в блоге: 27
28.01.2021, 19:17  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
потому что там внутри понятия не имею
Жалостно
Пока делаю потрошитель .acd файлов. Пока додумался до того, что использовать сам файл в реальном времени, долго и нудно. Лучше его выпотрошить и переписать таким образом, чтобы при запуске программы, считывать полученный файл, загрузить информацию в соответствующие массивы и потом, при вызове конкретной анимации, функция будет извлекать из массива информацию и производить соответствующие действия.
Так же не понял, что означает:
OffsetY = 4
Понятно, что смещение. Но оно рассчитывается как смещение окна или персонажа в окне? Когда вы делали своих персонажей, вы использовали этот параметр и как он отражался на действиях персонажа визуально?
0
Модератор
10069 / 3914 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
28.01.2021, 19:46
Цитата Сообщение от Argus19 Посмотреть сообщение
Не понятно. У второго изображения отсутствует время показа.
Ну если логически подумать значит 2 изображения за один кадр выводить накладывая? Что за изображения под этими номерами?
0
 Аватар для Argus19
1732 / 476 / 78
Регистрация: 24.09.2017
Сообщений: 2,573
Записей в блоге: 27
28.01.2021, 20:04  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
значит 2 изображения за один кадр выводить накладывая
Похоже, что так. Одно изображение девушки, а другое - круг внизу, в который она опускается.
0
 Аватар для Argus19
1732 / 476 / 78
Регистрация: 24.09.2017
Сообщений: 2,573
Записей в блоге: 27
29.01.2021, 21:16  [ТС]
Извлёк одну анимацию. Записал в файл. При запуске программа считывает данные из файла и записывает их в массив. Затем массив проигрывается.
Вложения
Тип файла: zip MultPlay.zip (76.3 Кб, 7 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.01.2021, 21:16

Изоляция Российского интернета
Если вдруг этот законопроект дойдет до своего логического заключения, что нас ждет? Придумают ли путь обойти барьер?

Изоляция ПК в локальной сети
Здравствуйте! Подскажите пожалуйста - есть роутер с интернетом и локальной сетью из 5-7 компьютеров. Как сделать так, чтобы один из...

Изоляция жесткого диска
дело стоит вот в чем. В кампе стоит жесткий диск на котором очень много крайне важной информации. Так вот каким образом изолировать жестак...

Лопнула изоляция на сетевом кабеле
У меня на ноуте возле пружинного хвостика штекера изоляция. Шнур не хочется новый покупать (даже если продается). Что делать-то. Может,...

Гальваническая изоляция программатора AVR
Друзья, Вот на таком собрать изолятор для программатора реально? http://www.ebay.som/itm/121132554211?_t ... EBIDX%3AIT Может...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru