通过


脚本编程常见问题解答

[Microsoft 代理从 Windows 7 开始已弃用,可能在后续版本的 Windows 中不可用。]

当我使用 Microsoft Visual Basic (或其他开发工具) 编写 Microsoft 代理脚本时,我看不到示例中使用的所有属性和事件。 如何实现访问它们?

Microsoft 代理控件支持的大多数事件、方法和属性仅在运行时公开。 有关详细信息 ,请参阅 Microsoft 代理控制编程

映射标记 (或其他某些标记) 似乎不起作用。

某些标记包含带引号的字符串。 对于某些编程语言(如 Microsoft Visual Basic 和 Visual Basic Scripting Edition),可能需要使用两个引号来指定标记的参数或连接双引号字符作为字符串的一部分。 后者如以下 Visual Basic 示例所示:

Agent1.Characters (“Genie”) 。朗读“This is \map=”+ chr (34) + “口述文本” _ + chr (34) + “=” + chr (34) + “气球文本” + chr (34) + “\”。

对于 C、C++ 和 Java 编程,在反斜杠和双引号前面加上反斜杠。 例如:

BSTR bszSpeak = SysAllocString (L“Is \\map=\”Spoken text\“=\”Balloon text\“\”) ;

pCharacter-Speak> (bszSpeak, ...) ;

注意

Microsoft 代理不支持 Microsoft 语音 API 中指定的所有标记。 此外,对某些参数的支持可能取决于安装的文本转语音引擎。 有关详细信息,请参阅 Microsoft 代理语音输出标记

 

我似乎没有在脚本 (或程序) 中获取 RequestStart 和 RequestComplete 事件。

这可能是由以下问题之一引起的:

  • 编程语言不完全支持 ActiveX 控件。 请查看文档,确保它支持 ActiveX 对象的 ActiveX 接口和事件。
  • 在脚本网页上,另一个控件无法安装或加载。 检查以确保在没有 Microsoft 代理的情况下正确安装和加载所有其他控件。
  • 在包含框架的脚本网页上,一个页面上有 <OBJECT> Microsoft 代理控件的 标记,另一页上有脚本化的事件。 事件仅发送到承载控件的页面。

我在网页上将 Microsoft 代理控件与其他 ActiveX 控件一起使用,但似乎未收到任何事件。

检查是否已正确安装其他控件。 如果另一个 ActiveX 控件未能正确注册自身,Microsoft 代理控件可能会收到其事件。

可以使用哪些编程语言对 Microsoft 代理控件进行编程?

Microsoft 代理应支持任何支持 ActiveX 接口的语言。 它包括 Visual Basic、VBScript、JScript、C/C++ 和 Java 的代码示例。

是否可以使用 JScript 访问从 Microsoft 代理返回的参数?

是的,但目前唯一的方法是使用 <SCRIPT LANGUAGE="JScript" FOR="*object*" EVENT="event()"> 语法。 尽管 Microsoft Internet Explorer 支持此语法,但其他浏览器不支持它,因此你可能希望避免对页面脚本的这一部分使用 JScript。

Microsoft 代理是否可以与语音识别或语音合成 (文本到语音转换或 TTS) 引擎一起使用,而不是由 Microsoft 提供的引擎?

是,前提是引擎支持 Microsoft 代理所需的 Microsoft 语音 API (SAPI) 4.0 接口。 请咨询发动机供应商。 有关 Microsoft 代理所需的 SAPI 接口的完整详细信息,请参阅 语音引擎支持要求

我的页面包括 Microsoft 代理的 HTML 对象标记、Lernout & Hauspie TruVoice TTS 引擎以及 Microsoft 命令和控制语音识别引擎,但并非所有组件都安装。

通常,可以通过刷新页面来更正问题。 作为一般做法,最好先指定 Microsoft 代理控制 <OBJECT> 标记,然后指定 Lernout & Hauspie TruVoice 引擎,然后指定命令和控制语音识别引擎。

调用 MoveTo 方法后,我的字符似乎冻结了,即使我已将 Return 动画分配给移动状态动画。

播放动画时,动画服务将继续显示其最后一帧,直到调用另一个动画。 因此,应在调用 MoveTo 后播放另一个动画。 如果为移动状态动画定义了 Return 动画,服务器将首先播放它。

当我查询字符的 Pitch 属性时,它将返回值 -1。

如果已使用语音引擎的默认音调属性编译字符,则会发生此情况;也就是说,在生成角色时,音高没有改变。

当代码尝试为文本转语音引擎设置 TTS 模式 ID 时,我收到以下错误:无法进行传出呼叫,因为应用程序正在调度输入同步呼叫。

若要设置 TTSModeID 属性,必须安装Speech.dll。 这通常是语音引擎安装代码的一部分。 还可以通过安装 Microsoft 代理下载页提供的语音对象控制面板 来安装此功能。

当我重试加载未能加载的字符时,调用会失败,并出现“字符已加载”错误。

当无法加载其关联的字符文件时,Microsoft 代理控件不会卸载字符对象 (释放引用) 。 如果要重试加载字符,必须在第二次调用 Load 之前显式调用 Unload。 如果尝试从网页脚本执行此操作,还需要在 Unload 调用前面加上 On Error Resume Next 语句,否则 Unload 调用也将失败。 (请注意,JScript 没有 On Error Resume Next 语句。)

但是,当文件加载失败时,可能不需要包含代码即可立即重试加载字符。 Microsoft Internet Explorer 和 Microsoft 代理服务器组件会自动尝试重试多次,因此重试导致成功加载的可能性是远程的。 更好的策略是等待 (设置计时器) 几秒钟后重试。

如何从应用程序或 Web 服务器安装 Microsoft 代理?

可以通过在 HTML 对象标记中包含代理的 CLSID,从 Microsoft 网站安装代理。 但是,如果要从自己的应用程序安装程序或自己的服务器包含和安装代理,则必须通过从“下载”页下载 Microsoft 代理自安装内阁文件来下载该文件。 下载时,请选择浏览器的“保存而不是运行”选项。 每当此文件运行时,它都会在目标计算机上安装 Microsoft 代理。 因此,可以在安装脚本中指定 文件。

不要尝试通过复制 Microsoft 代理的各种 来安装它。DLL 并尝试自行注册。 尝试通过任何其他方式安装 Agent,则不支持执行其自安装 cabinet 文件。

目标系统还必须包括最新版本的 MSVCRT.DLL (VC++ 运行时) 、REGSVR32.EXE (Microsoft VC++) 随附的注册工具以及 COM。 确保安装正确版本的最佳方式是要求安装 Microsoft Internet Explorer 3.02 或更高版本。 但是,也可以许可这些运行时要求。 (对于最新版本的 COM,请从 Microsoft 网站访问 DCOM 更新。)

Microsoft 代理 2.0 将不会安装在 Microsoft Windows 2000 上,因为此版本的操作系统已包含 代理。

是否可以使用 Visual Basic 安装向导安装 Microsoft 代理?

虽然可以使用 Visual Basic (VB) 代码创建自己的安装程序,但不能使用 Visual Basic 安装向导执行此操作。 若要从 VB 安装代理,可以使用 Shell 命令,指定 Microsoft 代理自安装文件。

如何实现 Windows 2000 上安装 Microsoft 代理?

Microsoft Agent 2.0 不会安装在 Windows 2000 上,因为它已作为操作系统的一部分包含在内。

使用 WAV 文件调用 Speak 时,AgentSvr 崩溃。

当字符一直使用 TTS 进行口语输出,然后更改为使用 WAV 文件时,可能会发生这种情况。 Speak 方法的第一个参数中未提供文本。

若要避免崩溃,请在 Speak 方法的第一个参数中包含空格字符,即使没有文本输出也是如此。

尽管我已经为特定语言 (DLL) 安装了代理语言组件,但在将字符的语言设置为该语言时,仍出现错误,指出缺少该组件。

安装代理语言组件时,通常会在打开代理应用程序(如 Microsoft Office 2000)时发生这种情况。 关闭所有应用程序,然后重试。 如果问题仍然存在,请重启计算机,现在应该能够设置语言 ID。

使用与号和“&”符号时,字符单词气球中符号周围的文本将被截断。

这是已知问题。 可以使用映射标记解决此问题。 例如,若要在字符的字气球中显示“A & B”,请在 Speak 语句中使用“A \map=”and“=”&&“\ B”。

我的应用程序允许用户更改默认字符,当他们更改时,程序会崩溃。

有两个可能的原因:

如果更改默认字符的 TTS 模式 ID,然后允许用户通过 ShowDefaultCharacterProperties 更改默认字符,则 AgentSvr 将崩溃。

此问题已在 Windows 2000 和 Windows XP 操作系统中修复。 若要避免在其他平台上崩溃,在更改默认字符的 TTS 模式 ID 后,不应允许用户更改默认字符,或者不要在应用程序或网页中使用默认字符。

如果应用程序不使用 Microsoft 提供的代理字符,请确保自定义字符使用具有 256 种颜色的完整调色板。 有关详细信息,请参阅设计 Microsoft 代理的字符文档。

我的页面从多个帧加载代理字符。 使用 IE 5 时,我收到 Microsoft 代理加载失败错误。

这是 IE 5 的已知问题。 浏览器处理特定事件的方式发生了变化,这会导致 HTML 脚本在启动 AgentSvr 之前开始运行。 为了使页面适用于所有版本的浏览器,需要将此行添加到脚本:

AgentControl.Connected = True

这显式创建与 AgentSvr 的连接。 请注意,仅当页面从多个帧加载代理时,才需要执行此操作。

当应用程序尝试在 Windows 2000 (或 Windows XP) 上安装 Microsoft 代理时,收到错误:代理与 Windows 2000 (或 Windows XP) 不兼容。

在 Windows 2000 (和 Windows XP) 上执行以前版本的代理核心组件柜文件MSAGENT.exe将阻止安装,并显示一条不准确的错误消息,指出代理与你运行的操作系统版本不兼容。 事实上,Microsoft 代理 2.0 核心组件作为 Windows 2000 (和 Windows XP) 的一部分包含在内,并且已默认通过 Windows 安装程序进行安装。

在此版本中,删除检查,并且安装文件不会在 Windows 2000 (或 Windows XP) 下显示上述错误消息。 请注意,这是对安装文件的唯一更改,并且代理核心组件本身没有代码更改。 因此,如果已安装代理 2.0,或者网站使用对象标记从 Microsoft 对象存储触发代理核心组件的自动下载,则不会受到此更新的影响。

如果在应用程序中包含代理核心组件安装文件,或者如果在服务器上发布安装文件,则可能需要下载此更新。 为此,请单击此处并选择“将此程序保存到磁盘”选项。 对于这些情况,必须具有有效的当前代理分发许可证。

或者,在安装 MSAGENT.exe 安装文件的早期版本时,还可以使用无提示选项来解决此问题。 shell 命令为:

MSAGENT.exe /q:a

这同样适用于最初于 1998 年 10 月发布的代理语言组件。 有一个检查将阻止阿拉伯语、法语、德语、希伯来语、意大利语、日语、朝鲜语、简体中文、西班牙语和繁体中文组件在 Windows 2000 (和 Windows XP) 下安装。 这些安装文件的较新版本以及 2000 年 3 月添加的其他 19 种语言不包含此检查,并将在 Windows 2000 (和 Windows XP) 上成功安装。

我的自定义角色在 Windows 2000 (和 Windows XP) 上表现出一些意想不到的行为。

对于使用少于 256 种颜色的调色板创建的字符,这是一个已知问题。 这些字符的问题包括背景中显示的透明颜色、透明气球文本、透明气球边框或透明气球背景。 请注意,此类字符可能会导致应用程序在“代理字符选取器”对话框或 Microsoft Office 助手库中加载时崩溃。 自定义字符必须使用具有 256 种颜色的完整调色板。 可以使用为 Office 助手字符提供的示例调色板作为起点,其中包含完整的 256 调色板。

该字符不使用英国英语 TTS 引擎,即使我已将其语言 ID 设置为 British English &h0809。

首先,请确保已安装所有必要的组件-代理核心组件、SAPI 运行时二进制文件和符合 SAPI4 的英国英语 TTS 引擎(如 TTS3000 英国英语引擎),可在代理下载页上下载。 如果角色仍未使用英国英语 TTS 引擎,则可能还安装了美式英语 TTS 引擎。 由于英国和美国英语 (英语) 共享同一种主要语言,而美国英语是默认语言,因此代理将选择 SAPI 返回的第一个可用美式英语 TTS 引擎。 若要使用英国英语 TTS 引擎,请改用字符的 TTSModeID 属性。 例如,TTS3000 英国英语男语音的 TTSModeID 为 {227A0E41-A92A-11d1-B17B-0020AFED142E}。 在 Microsoft Visual Basic 中,可以通过设置 Merlin 的 TTSModeID 来使用此引擎,如下所示:

AgentControl.Characters (“Merlin”) 。TTSModeID = {227A0E41-A92A-11d1-B17B-0020AFED142E}

使用语音标记 \Vol=0\ 将字符的音量设置为零时,它没有任何影响或使 AgentSvr 崩溃。

这是一个已知问题。 在 Windows 95、Windows 98 和 Windows Me 操作系统上,角色的卷不会更改,但将保留在以前设置的级别。 在 Windows NT 4.0、Windows 2000 和 Windows XP 平台上,即使未安装 TTS 引擎,也会导致 AgentSvr 崩溃。 由于字符音量的范围(从 0 (静音) 到 65535 (最大音量) )很大,并且难以辨别连续级别之间的差异,因此当希望角色的声音听不见时,简单的解决方法是将音量设置为 1 而不是 0。

在 MoveDown、MoveLeft、MoveRight 和/或 MoveUp 动画之后,我的自定义角色的 Return 动画无法正确播放。

确保为说话状态分配了一个简单的口语动画。 例如,可以使用一个框架,该框架由带有嘴覆盖的字符的中性位置组成。