通用用户界面命令体系结构
技术领域
本发明涉及计算机和用户界面,尤其涉及通用用户界面命令体系结构。
发明背景
当计算机技术在进步和发展时,计算机呈现给用户的用户界面(UI)也在进步和发展。图形用户界面(GUI)已成为了常见物,从而产生了用户通常易于交互的用户界面。可对用户界面使用允许以不同的方式向用户呈现命令选项的许多不同的呈现模型,诸如菜单、工具条、按钮、链接等等。
当设计这些GUI时遇到的一个问题是可用于GUI的不同呈现模型。通常,命令的提供者必须为要包括该命令的GUI支持的每一不同的呈现模型编写单独的描述和接口。这导致命令提供者一方的额外和重复的工作。在提供者编写命令之后开发新呈现模型的情况下会导致其它问题-因为编写命令的提供者不知道该新的呈现模型,因此他或她通常无法编写支持该新呈现模型的命令。
由此,具有一种实现减少这些问题的命令的方法将是有益的。
发明概述
此处描述了一种通用用户界面命令体系结构。
根据某些方面,描述了一种允许应用程序主存用于在计算设备上呈现的命令的通用体系结构。该体系结构包括命令主机和命令代理程序。命令主机提供可呈现多个用户界面命令的工作空间。命令代理程序标识对命令的多个支持的模式,并且进一步与命令主机协商以确定多个所支持的模式中的哪一个可用于该命令。
根据某些方面,描述了一种可用于允许应用程序主存命令的应用程序编程接口(API)。该API包括例如展示模式枚举的命令代理程序组件。响应于诸如命令主机等请求者调用模式枚举,命令代理程序组件对与组件相关联的特定命令返回由该组件支持的多个不同呈现模型的列表。
根据某些方面,讨论了一种描述注册命令以供应用程序激活的方法的激活机制。该激活机制通过标识包括一个或多个自变量的对象定义来创建命令代理程序。对于作为非文字自变量的一个或多个自变量中的每一个,递归地标识基于该自变量的一个或多个附加对象定义。然后创建命令代理程序作为由所标识的对象定义所定义的对象。
附图简述
全文中使用相同的标号来引用相同的组件和/或特征。
图1示出了其中使用通用用户界面命令体系结构的一个示例计算设备。
图2和3各自更详细地示出了一个示例性通用UI命令体系结构。
图4是示出用于使用通用UI命令体系结构来呈现命令的示例过程的流程图。
图5是示出用于创建命令代理程序的示例组件的框图。
图6示出了用于对象定义的示例数据结构。
图7是示出用于创建命令代理程序的示例过程的流程图。
图8示出了可用于实现此处所描述的技术的一个通用计算机环境。
较佳实施例的详细描述
此处描述了一种通用用户界面命令。根据某些方面,描述了一种允许应用程序主存命令以在计算设备上呈现的通用体系结构。该命令可由与应用程序相同的设计者或作者编写,或者可由其它方(例如,由第三方开发者)编写。另外,描述了一种可用于允许应用程序主存命令的应用程序编程接口(API)。此外,讨论了一种描述可注册命令以供应用程序激活的方法的激活机制。
通用UI命令体系结构
图1示出了其中使用通用用户界面命令体系结构的一个示例计算设备102。计算设备102包括均支持通用UI命令体系结构106的多个(x个)应用程序104。UI命令体系结构106允许应用程序104以通用的方式主存不同的命令,如将在下文中更详细讨论的。命令可由与创作应用程序104相同的一方(或多方)创作,或者可由不同方创作。
计算设备102表示具有呈现用户界面的处理器或控制器的各种不同的设备中的任一种。这些设备的示例包括台式计算机、服务器计算机、笔记本计算机、手持式或便携式计算机、娱乐设备、游戏控制台、个人数字助理(PDA)、蜂窝或移动电话等等。应用程序104表示各种应用程序中的任一种。这些应用程序的示例包括操作系统、休闲程序、实用程序、教育程序、生产程序、财务程序等等。
图2更详细示出了一个示例通用UI命令体系结构106。命令体系结构106包括命令主机130和多个(y个)命令代理程序132。可在命令体系结构106中包括任意数量的命令代理程序132。另外,尽管图2中示出了多个命令代理程序132,但作为替代可在命令体系结构106中仅包括单个命令代理程序。
命令体系结构106被称为UI命令体系结构是因为体系结构106是为用于UI命令而设计的,UI命令是经由UI呈现以供用户选择的命令。命令体系结构106允许创作或编写命令以经由用户界面呈现给用户并由用户选择。命令体系结构106可支持任何类型的命令,诸如访问资源(例如,诸如文件、存储设备、输入设备、输出设备等)的命令、向用户呈现内容的命令(例如,回放音频文件或音频/视频文件、打印出数据的硬拷贝等)、允许用户导航到特定位置(例如,文件、网络位置、控制面板等)的命令等等。
命令主机130是提供可放置命令以供呈现的外壳或工作空间的任何应用程序(诸如,图1的应用程序104)的至少一部分。命令主机可提供单个这样的外壳或工作空间,并且多个不同的命令主机可同时提供不同的外壳或工作空间。这些工作空间的示例包括窗口或显示器的其它部分、可听列表等等。
命令主机130支持用于呈现命令的一种或多种模式,也称为一种或多种呈现模型。这些不同的模式或呈现模型指的是可经由用户界面向用户呈现命令的不同方式。模式或呈现模型的示例包括菜单、菜单列表、上下文菜单、任务栏、按钮、链接(例如,超链接)等等。这些不同的模式或呈现模型通常包括诸如在GUI中可视地显示命令,尽管也可使用其它呈现方式(例如,可听地呈现命令)。
每一命令代理程序132是位于命令主机130和该命令的最终处理程序(称为命令提供者,如下文更详细讨论的)之间的中介。每一命令代理程序132与一特定命令相关联。命令代理程序132枚举该命令所支持的模式,并就对该命令使用哪一模式与命令主机130进行协商。如果命令代理程序132支持一特定模式,则命令代理程序132可创建与该模式相关联的特定命令提供者并将其给予命令主机130。该协商是经由接口134执行的。在某些实施例中,每一命令代理程序132展示一应用程序编程接口(API)。该API可由命令主机130在协商过程中调用。这一API的一个示例在下文中更详细地讨论。
UI命令体系结构106被称为是通用的是因为该协商过程以及单个命令代理程序能为其相关联的命令支持的模式的多样性。可使用同一命令代理程序来允许以各种不同的呈现模型呈现命令,且由此被视为是通用的。
命令主机130在每次命令主机的执行开始时与命令代理程序132协商。可使不同的命令代理程序132对命令主机130可访问,从而允许其相关联的命令由命令主机130通过UI来呈现。使命令代理程序132对命令主机130可访问的一种方式是通过以下更详细讨论的命令代理程序激活机制。命令主机130也可在不同的时刻,诸如只要选择有改变(例如,选择UI中的哪一(些)项)、只要命令上下文有改变(诸如UI类型的改变(例如,从可视UI变为可听UI的改变)、UI格式的改变(例如,对窗口重定大小)、UI内容的改变(例如,从作为操作系统的命令主机执行一不同的应用程序)等等)时与命令代理程序132协商。
作为这一协商的一个示例,假定应用程序可呈现同时具有菜单和按钮模式两者的用户界面。在该示例中,命令主机130可与命令代理程序132协商以确定使用这两种模式(菜单和/或按钮)中的哪一种。假定命令代理程序132与使用打印机生成所选数据的硬拷贝的打印命令相关联。还假定命令代理程序132支持按钮模式以及列表模式。命令主机130可与命令代理程序132协商,并确定主机130和代理程序132两者同时支持的唯一模式是按钮模式(代理程序132不支持菜单模式,而主机130不支持列表模式)。由此,协商将导致选择按钮模式。
应当注意,在某些实施例中,命令主机130可支持比命令代理程序132所支持的更多的模式。另外,命令主机130可具有对可将命令从一种模式转换成另一种模式的程序或其它资源的访问。继续前述示例,命令主机130可具有对将用于按钮模式中的命令的信息转换成可用于菜单模式中的命令的程序的访问。由此,在协商过程中,命令主机130可选择按钮模式,然后将所接收到的关于按钮模式中的打印命令的信息转换成菜单模式。这一过程允许例如命令代理程序132与在命令代理程序132生成之后创建的且命令代理程序132毫不知情的模式一起使用。
还应当注意,命令代理程序132可按不同的顺序来枚举其模式。在某些实施例中,命令代理程序132按照偏好的顺序(例如,命令代理程序132或命令代理程序132的作者偏爱的由命令主机130选择模式的顺序)来枚举其模式。然而,在某些实现中,命令主机130可选择忽略命令代理程序132偏爱的顺序。也可替换地使用其它排序,诸如随机顺序、字母顺序等等。
命令代理程序132也可枚举不同的命令组。这些组是对命令主机130的关于特定命令应彼此靠近的指示。通常,在某些实施例中,不要求命令主机130遵循由这些指示提供的指导,但是通常试图遵循这些指导。
在某些实施例中,命令代理程序132也可以是用于一个或多个命令代理程序的容器。例如,命令代理程序可支持作为菜单项的一种呈现模式,在该呈现模式中,可将命令作为UI中的单个菜单项来呈现。命令代理程序也可支持作为菜单列表的呈现模式,在该呈现模式中,命令代理程序是用于多个其它命令代理程序的容器,这些其它命令代理程序中的每一个以UI中的菜单项列表来显示。
图3更详细示出了一个示例通用UI命令体系结构106。命令主机130如上所述与命令代理程序132协商模式。另外,图3中示出了命令上下文140和命令提供者142。在某些实施例中,命令主机130、命令代理程序132、命令上下文140和命令提供者142的每一个在通信上彼此耦合,从而允许它们彼此通信。在某些实施例中,命令主机130、命令代理程序132、命令上下文140和命令提供者142的每一个都是一个对象,且能够调用其它对象的方法、枚举、属性等。
命令提供者142是特定命令的最终处理程序。命令提供者142控制调用命令时允许的各种动作(例如,响应于对诸如打印命令等命令的用户选择而涉及的动作)。命令提供者142通常包含只要调用特定命令时就执行的指令。命令提供者142是由命令代理程序132在完成了与命令主机130的模式协商之后实例化的对象。不同的命令提供者与命令代理程序132支持的每一模式相关联。由此,当模式协商导致特定模式时,命令代理程序132为该特定模式实例化一对象。所实例化的对象也被传递到命令主机130,从而允许命令主机130与命令提供者142交互。
应当注意,在某些情况下,命令主机130可与命令代理程序132协商多种呈现模型或模式。在这一情况下,命令代理程序132对多个呈现模型或模式中的每一个实例化多个命令提供者142中的一个,并且将每一如此实例化的命令提供者142传递到命令主机130。
在替换实施例中,命令代理程序132可与一个或多个命令提供者142组合。在这些实施例中,无需实例化单独的命令提供者142。相反,在命令主机130与命令代理程序132协商了模式之后,命令主机130可与作为该命令的最终处理程序的命令主机130而非命令提供者142交互。
命令上下文140是由命令主机130提供且可由命令代理程序132访问的上下文信息的列表。命令上下文140中包括的上下文信息可以变化。上下文信息指的是例如描述用户界面的信息、描述命令主机130的信息、描述用户界面中当前正在显示什么和/或如何显示它的信息、关于可用资源的信息等等。上下文信息的具体示例包括当前选中UI中呈现的什么项(如果有)、命令所处的区域的大小(例如,以像素表示)、UI中当前是否正呈现特定项或特征、特定资源是否在计算设备上可用、计算设备耦合到什么其它组件(例如,打印机当前是否耦合到计算设备)等等。不同的命令代理程序132能对不同的上下文信息感兴趣,且某些命令代理程序132可能对任何上下文信息都不感兴趣。当特定的命令代理程序132期望知道特定的上下文信息时,该特定命令代理程序132将与命令上下文140交互以获得该期望的上下文信息。
还应当注意,命令代理程序132支持的呈现模型可以基于命令上下文140而改变。例如,命令代理程序132可在特定组件(诸如打印机、个人音频播放器、扬声器等)耦合到计算设备的情况下支持一种特定的呈现模型,但是在该特定组件没有耦合到该计算设备的情况下不支持该特定呈现模型。作为另一示例,命令代理程序132可支持基于由命令主机130提供的工作空间的大小的不同呈现模型。
通用UI命令体系结构106便于创作命令。实现这一便利的一种方式是通过使用命令代理程序132。可经由同一命令代理程序132来访问命令的所有处理程序,而非要求作者为多个不同的呈现模型将同一命令进行多次不同的注册。另外,可对不同的模式共享公共的功能,诸如要为该命令显示的显示名称或图标,或当用户选中该命令时要采取的调用动作。这一共享例如可通过每一命令提供者142引用包含当与命令提供者142相关联的命令由用户选中时执行的指令集的同一对象来实现。或者,某些公共功能可由命令提供者132变为对命令主机130可用,而非在相关联的命令提供者142中实现或通过其来访问。
图4是示出用于使用通用UI命令体系结构106来呈现命令的示例过程180的流程图。过程180在软件中执行,尽管过程180的替换方面可以在固件、硬件或固件、硬件和/或软件的组合中执行。
最初,命令主机和命令代理程序协商一模式(动作182)。在某些实施例中,这一协商是通过命令代理程序向命令主机标识它所支持的模式,且命令主机将这些模式与命令主机所支持的模式进行比较,然后命令主机选择命令主机和命令代理程序都支持的模式之一来执行的。或者,在其它实施例中,该协商可采用其它形式。例如,命令主机可向命令代理程序标识它所支持的模式,命令代理程序将这些模式与命令代理程序所支持的模型进行比较,然后命令代理程序选择命令主机和命令代理程序都支持的模式之一。作为另一示例,命令主机可审阅它所支持的模式的列表,并对每一这样的模式向命令代理程序查询命令代理程序是否支持该模式—一旦命令主机标识了它所支持的同样也被命令代理程序所支持的模式之一,命令主机就可停止查询命令代理程序。
一旦协商了模式,命令代理程序实例化或创建与协商的模式相关联的命令提供者(动作184)。在某些实现中,命令提供者是通过命令主机调用由命令代理程序展示的GetProvider(获得提供者)方法来实例化的。GetProvider方法将在下文详细讨论。
命令主机然后基于动作184中实例化或创建的命令提供者将命令放置在用户界面中(动作186)。这一命令放置指的是在用户界面中定位命令的图标、名称和/或其它标识符。如上所述,协商模式可能不是命令主机实际用于呈现命令的模式(相反,命令主机可对协商模式使用从命令提供者获得的信息来使用不同的模式呈现命令)。
命令主机然后与命令提供者交互(动作188)。这一交互包括,例如呈现命令的用户界面以及在适当时(例如,在用户调用命令的情况下)调用命令的行为。
示例API实现
以下是实现上述通用UI命令体系结构106的一个示例API。
表I中列出了ProviderCategory(提供者类别)和ContextObjectDescription(上下文对象描述)。ContextObjectDescription用作CommandContext(命令上下文)对象持有且由主机提供的一个单独的上下文数据的名称。ProviderCategory用于确定所描述的上下文数据的易失性。易失性上下文值在改变任何主机上下文值时会离开该命令上下文。非易失性值留在上下文中。
表I
表II中列出了ContextObjects(上下文对象)类。在某些实施例中,在ContextObjects静态类中保存一组预定义的ContextObjectDescriptions。CommandContext也可保持不是该预定义列表的一部分的一组可扩展ContextObjectDescriptions。
表II
表III中列出了CommandContext。CommandContext是将ContextObjectDescriptions映射到对象值的索引器。CommandContext也具有当改变上下文时激发的事件。CommandContext类包括由图3的命令上下文140展示、且由命令主机130和/或命令代理程序132调用的属性、方法和枚举。
表III
表IV中列出了ModeDescription(模式描述)。ModeDescription是对模式和受管类型命名的串。受管类型在本示例中指的是代理程序经由CommandBroder.GetProvider方法返回命令提供者的要求。
表IV
表V中列出了StandardModes(标准模式)类。在某些实施例中,“标准”模式的列表可由命令代理程序用于实现。除这些标准模式之外,该组模式是可扩展的以包括其它模式。
表V
表VI中列出了CommandBroker(命令代理程序)类。CommandBroker类包括由命令代理程序132展示的、且可由图3的命令主机130调用的属性、方法和枚举。
表VI
表VII中列出了命令提供者接口的一个示例。这是用于图3的示例命令提供者142的接口。所列出的示例是用于支持“任务按钮”模式的命令的接口,即ITaskButtonProvider(任务按钮提供者接口)。ITaskButtonProvider包括可由命令主机访问并使用的两个串(ShortTitle(短标题)和LongTitle(长标题))。ImageSource(图像源)是当与该命令按钮提供者相关联的命令被用户选中时执行的指令集。当选中该命令时,通过命令主机调用ITaskButtonProvider.Invoke()来调用该指令集。
IProviderChanges(提供者改变接口)是命令提供者可实现来向命令主机给出改变通知的接口。ProviderChangeHandler(提供者改变处理程序)是声明从IProviderChanges内激发的ProviderChanged(提供者改变)事件的类型的受管委托。命令主机可使用ProviderChanged事件来告知何时应向命令提供者重新查询某一特定状态。
例如,如果ITaskButtonProvider的“ShortTitle”改变(例如,由于选择改变),则命令提供者可经由ProviderChanged事件通知命令主机其状态已改变。在该示例中,响应于用户通过与UI交互来改变选择,命令主机改变命令上下文内的“选中”状态,这导致命令上下文向命令提供者激发改变通知。作为该上下文改变事件的结果,命令提供者决定它希望改变其ShortTitle,因此它激发命令主机正在监听的ProviderChanged事件。命令主机经由它所具有的ProviderChangeHandler类型的方法接收ProviderChanged事件。作为该事件的结果,命令主机向命令提供者重新查询其ShortText(短文本),LongText(长文本)、IsEnabled(是否启用)等,从而获得给定其新状态时重新表示该命令的足够信息。命令主机使用该新信息来更新与该命令相关联的UI。
表VII
另外,可任选地包括实现用于编写要在此处所讨论的通用UI命令体系结构中使用的命令的标准逻辑的“助手(helper)”类。助手类在单个类中包括上述各个接口以便于使用此处所讨论的通用UI命令体系结构来创作命令。命令代理程序作者然后可从该助手类进行派生,并可覆盖其功能的任何期望的部分。表VIII列出了一个示例助手类ExplorerCommand(Explorer命令),它可例如用于不同版本的Windows
操作系统中的Explorer。
表VIII
命令代理程序激活机制
图2和3的命令代理程序132可用各种常规方式中的任一种来创建。在某些实施例中,使用一种采用激活程序的特定命令代理程序激活机制来创建命令代理程序132,如下所述。这一创建也称为实例化或构造。
图5是示出用于创建命令代理程序的示例组件的框图。图5示出了激活程序202和定义源204。定义源202包括命令代理程序定义204,它定义了如何实现特定的命令代理程序132。激活程序202访问定义源202以检索命令代理程序定义204,然后如定义204中所定义的那样创建命令代理程序132。
定义源202可以是各种不同源中的任一种。例如,定义源202可以是Windows
操作系统的注册表、数据库、文件(例如,以XML(可扩展标记语言)文件或某一其它格式)等等。
命令代理程序定义204也可采用各种不同的形式。在某些实施例中,命令代理程序定义204按照其构造函数形参描述了一个或多个对象。这些对象描述(此处也称为关键名)描述了要被实例化或创建以创建命令代理程序132的对象。每一对象描述可具有零个或多个构造函数形参。构造函数形参可以是文字的(例如,串、数字、XML文档、或字节数组)或非文字的(例如,另一对象描述)。在对象描述具有一个或多个非文字形参的情况下,这些非文字形参中的每一个也被递归地实例化或创建,直到实例化或创建了所有的对象。
图6示出了用于对象定义220的一个示例数据结构。一个或多个这样的对象定义共同构成了图5的命令代理程序定义204。由此,命令代理程序的示例数据结构是一个或多个对象定义200数据结构的集合。对象定义200包括程序集字段或部分222、类型字段或部分224、形参字段或部分226、以及文字定义字段或部分228。这些部分222、224、226和228中的每一个储存表示所定义的对象的不同方面的各种数据,如下所述。
程序集部分222指示可从其实例化该命令代理程序的程序集。在某些实现中,程序集部分222指示包含要实例化的命令代理程序的代码的受管程序集(dll)的“强名”(strong name)。强名指的是按照名称、版本、公钥令牌和文化唯一地标识程序集(例如,盘上)的名称。
类型部分224包括由对象定义220定义的对象的标识符。通常该标识符是字母数字串,尽管可替换地使用其它字符或符号作为标识符。不同程序集中的不同对象定义可在其各自的类型部分24中具有相同的标识符。类型部分224中的标识符结合程序集部分222中的程序集允许唯一地标识对象。
包括了形参部分226以标识由对象定义220定义的对象的形参。特定对象可能没有任何形参,在这一情况下,无需包括形参部分226(或者可以包括但为空,或者包括关于没有形参的指示)。如上所述,形参可以是文字或非文字的。对于每一非文字形参,存在定义作为该非文字形参的对象的另一对象定义220。对于每一文字形参,存在文字定义字段228中定义该文字(例如,标识特定串、特定数字、特定XML文档、或特定字节数组)的定义。如果由对象定义220定义的对象没有任何形参,则无需包括文字定义部分226(或者可以包括但为空,或者包括关于没有任何文字的指示)。
图7是示出用于创建命令代理程序的示例过程240的流程图。过程240由图5的激活程序200实现,且通常在软件中执行(尽管过程240的至少一部分可替换地在硬件、固件或硬件、固件和软件的组合中执行)。
最初,标识顶层对象定义(动作242)。然后访问所标识的对象定义(动作244)并标识所标识的对象定义的任何形参(动作246)。然后检查是否有动作246中标识的为非文字的任何形参(动作248)。如果没有这样的形参(例如,没有形参或者所有形参是文字),则过程240完成分析所标识的对象定义(动作250)。然而,如果存在为非文字的至少一个形参,则标识每一非文字形参(动作252)。这些非文字形参中的每一个是另一对象定义。过程240然后返回到动作244以分析所标识的非文字形参中的每一个。由此,过程240继续递归地分析命令代理程序定义中的每一对象定义,直到按照文字定义了所有对象定义(或者没有形参)。在按照文字定义了所有对象定义(或者没有形参)之后,通过对每一对象调用构造函数来实例化由这些对象定义,因而由命令代理程序定义的各个对象(动作254)。
如此定义的每一对象然后可通过向上返回通过定义对象工作来实例化或创建。例如,激活程序200可实例化或创建仅按照文字定义的对象(或没有形参的对象),然后使用这些对象来实例化或创建按照刚才实例化或创建的这些对象定义的对象,依此类推。当实例化了顶层对象定义时,实例化了命令代理程序。
表IX列出了名为“FooBroker”的命令代理程序的命令定义的一个示例。
表IX
如可从表IX的示例中看到的,顶层对象定义(或关键名)\Test用程序集部分、类型部分、形参部分和文字部分(标识为title行)来定义。这些部分中的每一个在表IX的顶层对象定义示例中为单独的一行。程序集部分指示从其实例化该命令代理程序的程序集(FooAssembly)。类型部分指示由该对象定义所定义的对象类型(FooBroker)。形参部分标识用于该对象定义的两个形参(title和bar)。title是在文字定义部分中定义的串,它是\Test对象定义的标题行,为“Hello,World!”bar形参是另一对象,它在下一对象定义中定义。
在对象的实例化期间,图5的激活程序200搜索定义源202以标识位于顶层对象定义\Test下方的另一对象定义,该对象定义也是bar对象的对象定义。该对象定义是\Test\bar关键名。
\Test\bar关键名也用程序集部分、类型部分、形参部分和标题部分(其每一个是表IX中的一行)来定义。程序集部分指示从其例示该命令代理程序的程序集(FooAssembly)。这是与顶层关键名\Test中标识的相同的命令主机。类型部分指示由该对象定义所定义的对象类型(BarObject)。形参部分标识用于该对象定义的两个形参(count和snoo)。count是在文字定义部分中定义的整数,它是\Test\bar对象定义的count行,为十六进制值“38”。snoo形参是另一对象,它在下一对象定义中定义。
在对象的实例化期间,图5的激活程序200搜索定义源202以标识位于\Test\bar对象定义下方的另一对象定义,该对象定义也是snoo对象的对象定义。该对象定义是\Test\bar\snoo关键名。
\Test\bar\snoo关键名也用程序集部分和类型部分来定义。snoo对象的对象定义没有形参,因此对象定义中不包括形参部分或文字定义部分。程序集部分指示从其例示该命令代理程序的程序集(FooAssembly)。这是与顶层关键名\Test和\Test\bar关键名中标识的相同的命令主机。类型部分指示由该对象定义所定义的对象类型(SnooObject)。
表X列出了支持此处所讨论的命令代理程序激活的一个示例API。以上讨论的每一对象定义或关键名是用表X中的IActivationDefinition(激活定义接口)接口来封装的。程序集(Assembly)字段和类型(Type)字段都是IActivationDefinition接口的属性。当存在时,每一形参和文字定义是IDefinitionElement(定义元素接口)。
表X
示例计算机环境
图8示出了通用计算机环境300,它可用于实现此处所描述的技术。计算机环境300仅为计算环境的一个示例,并非暗示对计算机和网络体系结构的使用范围或功能的局限。也不应将计算机环境300解释为对示例性计算机环境300中示出的任一组件或其组合具有任何依赖或需求。
计算机环境300包括计算机302形式的通用计算设备。计算机302可以是例如图1的计算设备102。计算机302也可以是作为多媒体演示的源的编码器设备。计算机302的组件可包括但不限于,一个或多个处理器或处理单元304、系统存储器306以及将包括处理器304的各类系统组件耦合至系统存储器306的系统总线308。
系统总线308表示若干种总线结构类型的一种或多种,包括存储器总线或存储器控制器、外围总线、加速图形端口、以及使用各类总线体系结构的处理器或局部总线。作为示例,这类体系结构包括工业标准体系结构(ISA)总线、微通道体系结构(MCA)总线、增强ISA(EISA)总线、视频电子技术标准协会(VESA)局部总线以及外围部件互连(PCI)总线,也称为Mezzanine总线。
计算机302通常包括各种计算机可读介质。这类介质可以是可由计算机302访问的任一可用介质,包括易失性和非易失性介质、可移动和不可移动介质。
系统存储器306包括诸如随机存取存储器(RAM)310等易失性存储器,和/或诸如只读存储器(ROM)312等非易失性存储器形式的计算机可读介质。基本输入/输出系统(BIOS)314包括如在启动时帮助在计算机302内的元件之间传输信息的基本例程,通常储存在ROM 312中。RAM 310通常包含处理单元304立即可访问或者当前正在操作的数据和/或程序模块。
计算机302也可包括其它可移动/不可移动、易失性/非易失性计算机存储介质。作为示例,图8示出了对不可移动、非易失性磁介质(未示出)进行读写的硬盘驱动器316,对可移动、非易失性磁盘320(如,“软盘”)进行读写的磁盘驱动器318以及对可移动、非易失性光盘324,如CD-ROM、DVD-ROM或其它光介质进行读写的光盘驱动器322。硬盘驱动器316、磁盘驱动器318和光盘驱动器322的每一个通过一个或多个数据介质接口326连接到系统总线308。或者,硬盘驱动器316、磁盘驱动器318和光盘驱动器322可通过一个或多个接口(未示出)连接到系统总线308。
盘驱动器及其相关联的计算机可读介质为计算机302提供了计算机可读指令、数据结构、程序模块和其它数据的非易失性存储。尽管示例示出了硬盘316、可移动磁盘320和可移动光盘324,然而可以理解,可储存可由计算机访问的数据的其它类型的计算机可读介质,如磁带盒或其它磁存储设备、闪存卡、CD-ROM、数字多功能盘(DVD)或其它光存储、随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)等,也可用于实现示例性计算系统和环境。
任意数量的程序模块可储存在硬盘316、磁盘320、光盘324、ROM 312和/或RAM 310中,作为示例,包括操作系统326、一个或多个应用程序328、其它程序模块330以及程序数据332。这些操作系统326、一个或多个应用程序328、其它程序模块330和程序数据332(或其某一组合)中的每一个可实现支持分布式文件系统的常驻组件的全部或部分。
用户可以通过诸如键盘334和定点设备336(如,“鼠标”)等输入设备向计算机302输入命令和信息。其它输入设备338(未具体示出)可包括麦克风、操纵杆、游戏垫、圆盘式卫星天线、串行端口、扫描仪和/或其类似物。这些和其它输入设备通过耦合至系统总线308的输入/输出接口340连接到处理单元304,但也可以通过其它接口和总线结构连接,如并行端口、游戏端口或通用串行总线(USB)。
监视器342或其它类型的显示设备也通过接口,如视频适配器344连接到系统总线308。除监视器342之外,其它输出外围设备可包括诸如扬声器(未示出)和打印机346等组件,它们可通过输入/输出接口340连接到计算机302。
计算机302可以使用到一个或多个远程计算机,如远程计算设备348的逻辑连接在网络化环境中操作。作为示例,远程计算设备348可以是个人计算机、便携式计算机、服务器、路由器、网络计算机、对等设备或其它普通网络节点等等。远程计算设备348被示为可包括此处相对于计算机302所描述的许多或所有元件和特征的便携式计算机。
计算机302和远程计算机348之间的逻辑连接被描述为局域网(LAN)350和一般的广域网(WAN)352。这类网络环境常见于办公室、企业范围计算机网络、内联网以及因特网。
当在LAN网络环境中实现时,计算机302通过网络接口或适配器354连接至局域网350。当在WAN网络环境中实现时,计算机302通常包括调制解调器356或用于通过广域网352建立通信的其它装置。调制解调器356可以对计算机302是内置或外置的,它可通过输入/输出接口340或其它适当的机制连接至系统总线308。可以理解,示出的网络连接是示例性的,也可以使用在计算机302和348之间建立通信链路的其它装置。
在诸如用计算环境300示出的网络化环境中,相对于计算机302描述的程序模块或其部分可储存在远程存储器存储设备中。作为示例,远程应用程序358驻留在远程计算机348的存储器设备中。为说明起见,应用程序和诸如操作系统等其它可执行程序组件在此处被示出为离散的框,尽管可以认识到,这些程序和组件在不同的时刻驻留在计算设备302的不同存储组件中,并由计算机的数据处理器执行。
各种模块和技术在此可在诸如程序模块等可由一个或多个计算机或其它设备执行的计算机可执行指令的一般上下文中描述。一般而言,程序模块包括例程、程序、对象、组件、数据结构等,它们执行特定的任务或实现特定的抽象数据类型。通常,程序模块的功能可如各实施例中所需地组合或分布。
这些模块和技术的一种实现可被储存在某一形式的计算机可读介质上或通过其来发送。计算机可读介质可以是可由计算机访问的任何可用介质。作为示例而非局限,计算机可读介质包括“计算机存储介质”和“通信介质”。
“计算机存储介质”包括以用于储存诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任一方法或技术实现的易失性和非易失性,可移动和不可移动介质。计算机存储介质包括但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、磁盒、磁带、磁盘存储或其它磁存储设备、或可以用来储存所期望的信息并可由计算机访问的任一其它介质。
“通信介质”通常具体化为诸如载波或其它传输机制等已调制数据信号中的计算机可读指令、数据结构、程序模块或其它数据。通信介质还包括任一信息传送介质。术语“已调制数据信号”指以对信号中的信息进行编码的方式设置或改变其一个或多个特征的信号。作为示例而非局限,通信介质包括有线介质,如有线网络或直接连线连接,以及无线介质,如声学、RF、红外和其它无线介质。上述任一的组合也应当包括在计算机可读介质的范围之内。
尽管以上描述使用了对结构特征和/或方法动作专用的语言,但可以理解,所附权利要求书中定义的本发明不限于所描述的具体特征或动作。相反,公开了这些具体特征和动作作为实现本发明的示例性形式。