用户接口自动框架的类和接口的制作方法

文档序号:6402261阅读:145来源:国知局

专利名称::用户接口自动框架的类和接口的制作方法
技术领域
:本发明涉及辅助技术(assistivetechnology)、自动化测试和其它产品领域,所述产品对用户接口信息以及具有用户接口信息的这些产品的交互作用进行收集。
背景技术
:辅助技术(AT)的产品是用于为在学习、交流和访问计算机软件所含有和表达的信息这些方面需要辅助的计算机用户提供帮助。这些产品需要与计算机接口相关的信息。同样,现有的自动化测试产品和用户接口命令辅助程序也需要有关用户接口的信息。当前,这些产品并不具有足够的用户接口(UI)信息源。上述3种类型的产品(客户)需要得到其它方面的必要支持以实现(1)收集有关应用程序用户接口的信息;(2)无论采用什么技术创建UI,都能可编程地揭示和询问UI单元;(3)产生键盘和指针输入;以及(4)了解哪种类型的状态或功能当前有效。目前,还没有哪种单一技术可以为某一AT产品提供所有这些能力。而且,当前的AT产品并不都是与所有的图形操作系统(OS)技术完全兼容,并且缺乏以集中方式过滤和调整冗余或误导通知的能力。而另一缺陷在于现有的自动和存取基本架构缺乏可扩展性,并且因此需要改变OS层以添加新功能。而且,目前,为收集有关应用程序用户接口的信息,AT产品必须写入应用程序定制代码以便为用户获得信息。而写入这些应用程序定制代码的处理是费时并需要不断维护。当前的自动基础架构也缺乏以相容方式过滤和调整冗余或误导事件通知的能力。这样,事件的消费者就需要独立地过滤信息。当前的系统允许将AT产品以3级颗粒度(granularity)级别请求事件通知(1)桌面上的一切;(2)在特定的进程中(例如打开字处理程序);或3)在特定进程中的线程(进程中的多对象操作)。目前,当客户接收一个事件,它就对产生了该事件的特定窗口的窗口句柄和指示哪里产生事件的其它信息位进行接收。客户做出交叉处理调用以检索与该事件相关的UI对象。利用该对象,客户可以做出附加交叉处理调用以请求有关该对象的信息。如果客户需要五段信息,那么,客户就必须做出5次交叉处理调用。交叉处理调用是非常缓慢的,因此,使用当前存取基础架构收集UI信息的执行成本是很高的。这种类型的已知情况在图11中示出。服务器应用程序12激活事件6。核心程序14判定必须通知哪些客户,并向感兴趣的客户10发送事件通知18。客户10经过处理边界2向服务器应用程序12发出对有关事件通知18的对象的请求16。服务器应用程序12返回对象20,并且随后,客户10可以开始发送对与激活事件的UI控制相关信息的请求16。服务器应用程序12经过处理边界2将所请求的信息20返回给客户10。另一种选择是将客户代码作为进程中的动态链接库(.DDL)进行加载。这种选择具有一些缺陷。首先,它需要系统协助将客户代码加载到进程中。其次,由于一旦将客户代码加载到应用程序的进程中,就很难对其收集的信息进行限制,因此,它会产生安全问题。再次,对于客户来说为了使其成为有效的技术,就必须将其加载到系统上运行的每个进程中。比较理想的做法是仅将可信任的客户加载到另一应用程序进程中。而且,需要系统能够给予客户对其想要接收的事件通知进行规定的能力。在已知的系统中,客户可能需要做出大量交叉处理调用,并随后分析信息以判定它是否对该事件感兴趣。需要一种机制能够以更加有效的方式执行对该事件的过滤,并能很容易地进行升级以支持新的系统或应用程序事件。而且,需要一种仅使用可信任成份的系统,以缓解安全问题。目前,当查询有关用户接口的信息时,要求AT产品对树进行访问,该树是特定UI框架的本身结构。因此,对于多个UI框架就需要多个树来传送用户接口信息。这些不同的树可能含有不感兴趣的信息或对用户不可见,例如隐藏的容器对象,它对最终用户控制的可视UI控制进行管理。因此,就需要一种仅具有用户感兴趣的节点的单一标准的树。需要一种解决方案来解决对AT产品、自动测试工具和命令辅助程序的需求。这种解决方案可以由所有的图形OS技术使用,并能允许对所有形式的UI和UI组件的存取访问。
发明内容本发明针对一种为客户提供用户接口信息的方法和计算机应用程序。在本发明的一个方面,提供了一种在为客户提供用户接口信息的存取系统中使用的工具系统。该存取系统包括客户侧和提供者侧。该工具系统包括客户侧自动工具,包括查询用户接口信息的客户自动类。该客户自动类包括事件登记工具和逻辑单元揭示工具。这组工具还包括提供者侧自动工具,以便为客户提供用户接口信息。提供者侧自动工具包括自动提供者类,具有为客户提供事件信息的工具。在另一方面,客户侧工具组包括客户侧自动机制和客户侧逻辑单元机制,客户侧自动机制包含从提供者侧查询用户接口事件信息,而客户侧逻辑单元机制包括表示在逻辑树中用户接口单元的逻辑单元类。在另一方面,提供者工具包括提供者侧自动类和提供者侧自动接口,提供者侧自动类包括用于向客户提供事件通知的工具,而提供者侧自动接口用于揭示用户接口属性。提供者侧工具进一步包括原始单元接口,用于返回有关特定相关单元的信息;以及原始单元上下文(context)接口,用于管理与特定事件无关的事件和功能。在另一方面,本发明包括应用程序接口系统,用于通过存取系统向客户提供用户接口信息。该存取系统包括将用户接口信息从提供者侧传送到客户侧的一种机制,以及有选择性地揭示用户接口信息的逻辑树。应用程序接口系统包括用于帮助客户获得用户接口信息的客户侧应用程序接口。客户侧应用程序接口包括自动类、逻辑单元类、原始单元类、控制模式类和输入类。提供者侧应用程序接口包括提供者自动类、提供者自动接口、原始单元接口和控制模式提供者接口。在另一个方面,本发明包括一种计算机可执行方法,用于通过存取系统向客户提供用户接口信息。该方法包括用于帮助客户获得用户接口信息的客户侧应用程序接口,其中客户侧应用程序接口包括自动类、逻辑单元类、原始单元类、控制模式类和输入类。该方法还包括提供提供者侧应用程序接口以响应客户请求,该提供者侧应用程序接口包括提供者自动类、提供者自动接口、原始单元接口和控制模式提供者接口。在另一方面,本发明包括一种计算机可执行方法,用于通过存取系统向客户提供用户接口信息。该方法包括使用从客户自动类中选择的事件句柄请求用户接口信息,以及包括一种使用相应的引发事件方法来为提供者提供用户接口事件通知的方法。对于本领域的熟练技术人员来说,本发明的其它优点和新颖特征将通过下面的描述变得更加显而易见,或可以从本发明的实施中了解。本发明将结合下述附图进行详细描述。图1是适用于实现本发明的计算系统环境框图;图2是在存取系统、客户环境和服务器环境之间的互动框图;图3是说明存取系统核心的组件框图;图4(A)-4(D)是说明从本机单元(nativeelement)创建逻辑树;图5是示出创建逻辑树的过程次序的流程图;图6示出形成逻辑单元的对话框和其组件;图7是说明涉及激活本发明事件机制过程的流程图;图8是说明本发明实施例中客户侧API的框图;图9是说明本发明实施例中服务器侧API的框图;图10是说明使用本发明存取系统的实施例说明在客户和服务器之间互动的框图;图11是示出已知的事件通知系统。具体实施例方式示范操作环境图1说明了可以实现本发明的一个示范计算系统环境100的实例。该计算系统环境100仅是一种适合的计算系统环境的示例,并非要将本发明的使用或功能范围局限于此。计算环境100也不能解释为必须对有关示范操作环境100说明的任一组件或组合具有依赖或要求。本发明可以用计算机可执行指令的通用环境来描述,例如计算机执行的程序模块。通常,程序模块包括执行特定任务或执行特定抽象数据类型的例行程序、程序、对象、组件、数据结构等。而且,本领域的技术人员可以理解本发明可以用其它计算机系统配置实现,包括手持设备、多处理器系统、基于微处理器或可编程的消费类电子产品、迷你计算机、大型计算机等。本发明还可以在分布式计算环境中实现,其中由通过通信网络链接的远程处理设备来执行任务。在分布式计算环境中,在本地和远程计算机存储媒体中都可包含程序模块,所述媒体包括存储器存储设备。参照图1,一种执行本发明的示范系统100包括以计算机110形式出现的通用计算设备,它包括处理单元120、系统存储器130和系统总线121,它将包括系统存储器在内的各种系统组件耦合到处理单元120。计算机110典型地包括各种计算机可读媒体。作为示例而不是限定,计算机可读媒体包括计算机存储媒体和通信媒体。系统存储器130包括易失和/或非易失存储器形式的计算机存储媒体,例如只读存储器(ROM)131和随机存取存储器(RAM)132。在ROM131中通常存储了基本的输入/输出系统133(BIOS),它包含帮助,例如在启动期间,在计算机110各单元之间传输信息的基本例行程序。RAM132通常包括处理单元120需要立刻存取和/或当前正在处理的数据和/或程序模块。作为示例而不是限定,图1示出了操作系统134、应用程序135、其它程序模块136以及程序数据137。计算机110可以包括其它可移动/不可移动、易失/非易失计算机存储媒体。仅作为示例而不是限定,图1示出了对不可移动非易失磁性媒体进行读写的硬盘驱动器141、对可移动非易失磁盘152进行读写的磁盘驱动器151,以及对可移动非易失光盘156,例如CDROM或其它光媒体进行读写的光盘驱动器155。其它可以用于示范操作环境的可移动/不可移动、易失/非易失计算机存储媒体包括(但不局限于)磁带盒、闪存卡、数字通用盘、数字视频带、固态RAM、固态ROM等。硬盘驱动器141通常通过不可移动存储器接口例如接口140与系统总线121相连,而磁盘驱动器151和光盘驱动器155通常通过可移动存储器接口例如接150与系统总线121相连。在图1中讨论和说明的驱动器及其相关计算机存储媒体为计算机110提供了对计算机可读指令、数据结构、程序模块和其它数据的存储。在图1中,例如,硬盘驱动器141示出存储了操作系统144、应用程序145、其它程序模块146和程序数据147。注意,这些组件既可与操作系统134、应用程序135、其它程序模块136以及程序数据137相同,也可以不同。对操作系统144、应用程序145、其它程序模块146和程序数据147给出不同的参考标记是为了说明至少它们是不同的副本。通过输入设备,例如键盘162和指示设备161(通常为鼠标、轨迹球或触摸板),用户将命令和信息输入到计算机110。其它输入设备(未示出)包括麦克风、操纵杆、游戏手柄、卫星天线、扫描仪等。这些设备和其它的输入设备通常通过耦合到系统总线的用户输入接口160连接到处理单元120,但也可以通过其它接口和总线结构,例如并行口、游戏端口或通用串行总线(USB)进行连接。通过一种接口,例如视频接口190,也可将监视器191或其它类型的显示设备连接到系统总线121。除了监视器,计算机还可以包括其它通过输出外围接口195连接的外围输出设备,例如扬声器197和打印机196。在本发明中的计算机110可以在使用逻辑连接到一个或多个远程计算机,例如远程计算机180,的联网环境中工作。远程计算机180可以是个人计算机,并且虽然在图1中仅示出了存储器存储设备181,但它通常包括上述有关计算机110所描述的许多单元或所有的单元。图1中描述的逻辑连接包括局域网(LAN)171和广域网(WAN)173,但也包括其它网络。当在LAN联网环境中使用,计算机110通过网络接口或适配器170连接到LAN171。当在WAN联网环境中使用,计算机110通常包括调制解调器172或其它在WAN173上建立通信的装置,例如因特网。调制解调器172,可以是内置也可以外置,可以通过用户输入接口160或其它合适的机制连接到系统总线121。在联网的环境,针对计算机110描述的程序模块或部分程序模块可以存储在远程存储器存储设备上。通过示例但不是限定,图1示出将远程应用程序185驻留在存储器设备181上。需要了解所示的网络连接只是示例,还可以使用其它装置来建立计算机之间的通信链路。虽然,计算机110的许多其它内部组件并没有示出,但本领域的技术人员可以理解这些组件和互连已经众所周知。因此,有关计算机110的内部构造没有必要在本发明中进一步详述。存取系统结构如图2所示,存取系统200与客户环境300和服务器环境400交互。存取系统200可以在上述图1所述的计算机环境100中实现。存取系统200包括便于与客户300交互的客户侧存取接口220,便于与服务器侧400交互的服务器侧存取接口230,以及存取系统核心201。本发明的存取系统200提供了可编程访问用户接口(UI)的客户侧API305以及提供者侧API440。存取系统200允许应用程序自身或任何它们所使用的组件可存取。客户环境300最好包括辅助技术(AT)产品或自动UI测试工具。服务器侧400可执行多种不同的技术,如图2所示。服务器系统410包括适配器412和核心程序414,它可以在第一类型的UI中找到。服务器系统420包括代理组件422和控制程序424,它可以在第二类型的UI中找到,例如由位于华盛顿州雷蒙德的微软公司所出品的微软操作系统产品中使用的Win32UI。服务器系统430包括适配器432和内部OM434,它可以在可选的第三类型UI中找到。如图3所示,包含在存取系统200中的一种事件机制依赖于UI自动客户202和UI自动服务器204,便于与客户环境300和服务器环境400交互。UI自动客户202和UI自动服务器204将参照本发明的事件机制210在下面详细描述。本发明的存取系统200为客户(AT产品)提供如下能力1)收集有关应用程序用户接口的信息;2)无论采用什么技术创建UI,都能可编程地揭示和询问UI单元;(3)产生键盘和指针输入;以及(4)了解哪种类型的状态或功能当前有效。存取系统200允许应用程序使得其自身和其组件可存取。如图2和3所示的结构展示了存取系统200的一些主要方面,包括1)逻辑UI树;2)控制模式;3)事件机制;4)属性;和5)客户和服务器侧API,所有这些都将在下面详细描述。UI存取逻辑树222存取系统200的一个完整组件就是逻辑树222,如图4(D)所示的一个示例。树222包含在客户侧存取接口220中。逻辑树是UI单元的基础结构层次的过滤图,而不是必须由控制或应用程序开发程序所执行的单独树。实际上,它切断了一些意义明确的属性,感兴趣的或不感兴趣的,这些属性指示了在逻辑树222中是否应该揭示出该结构单元。存取系统核心201消化这些信息以产生过滤的UI逻辑树222,随后,将其提供给AT产品或测试脚本。逻辑树222是单元树,每个单元表示了一种控制、控制中的一项或一分组结构,它们可以是对话框、窗格或框架。逻辑树222的结构应该表示用户可察觉到的应用程序UI(即使该控制实际上是使用一种不同的基础结构执行)。树应该随时间保持稳定。只要对于用户来说应用程序看上去是相同的,即使在场景后的应用程序执行细节已经变化,表示该应用程序的逻辑树222也要保持相同。为结构和执行原因而存在的本机的一些单元,例如在微软OS产品中的外壳“ShDocView”窗口,不应该在该树中出现,因为用户不能察觉到它们。逻辑树222是从多个分段中创建的单一树,它能将多个不同的处理进行统一,因此,使得它们对于客户端来说是相同的。逻辑树222允许批量检索,并且能获得属性列表的一个值。当用户正常地激活跨处(crossprocess)调用以请求值时,存取系统200将通过使用逻辑树222来取出它们。逻辑树222是从用于创建原始树的分段中构建,而不象已有系统中在一步中就构建成。如图5所示,有3个主要过程来创建逻辑树222。在过程72,存取系统200定位基础技术的本机各单元,并到达如图4(A)所示的本机树。在过程74,存取系统200组合本机各单元以形成如图4(B)所示的原始树20。最后,在过程76,通过隐藏原始树20中不感兴趣的组件来获得逻辑树222,如图4(D)所示。图4(A)说明了两种本机树10和14,它们是从基础技术,例如Win32UI或任意其它可用UI的本机单元中构建的。本机树10包括父节点11和多个彼此具有不同关系的后代12。同样,本机树14包括具有多个子节点16的父节点15。子节点16可以彼此作为兄弟节点来描述。如图4(B)所示,本机树10和14可以结合形成原始树20。原始树20包括父节点21,具有两个子节点22和30。子节点22具有后代23-29,而子节点30具有后代31-33。该原始树20是本机树10和14、形成节点22-29的本机树10的节点以及形成节点30-33的本机树14的节点的组合。通过如图4(C)和4(D)概括所示的方法,原始树20转换成了逻辑树222。在从原始树20转换为逻辑树222的过程中,开发程序可以在原始树中插入暗示。开发程序可以将原始树20中的节点标记为“隐藏自身”或“隐藏自身及子节点”或“隐藏节点的子节点”等。开发程序也可以横向移动节点或将节点放置在子节点之前。对原始树20中这些“暗示”和修改被用来形成逻辑树222。例如,在图4(C)中,开发程序将原始树20的节点24-26和33标记为不感兴趣,如框40和41所示。通常,含有对用户不可见的单元的节点被标记为不感兴趣。而有关可视UI的节点通常被认为是感兴趣的,并且将被包含在逻辑树222中提供给AT客户300使用。如图4(D)所示,标记为不感兴趣的这些节点并没有包含在逻辑树222中。存取系统200使用逻辑树222来查找有关事件的信息、系统的状态、对象的位置以及控制信息。已知的系统不具备在它们的树中进行研究的能力。而逻辑树222可以基于客户300的选择进行浏览,并提供信息,而不用顾虑服务器侧使用的应用程序。逻辑树222是一种单独的标准树,它是UI的逻辑表现,并且形成只包含客户200感兴趣单元的形式。因此,逻辑树222呈现出一种层次体系,能精密映射到展示给最终用户的结构,而不是强迫AT产品过滤UI单元的结构体系并猜测呈现给最终用户的模式。这对AT产品将UI描述给用户的任务进行了大大简化,并帮助了用户与应用程序的互动。因为该逻辑UI树222是存取系统200的基础部分,存取系统200所有的其它组件都是根据逻辑树222工作。例如,图6示出具有非常简单的结构的简易对话框60。然而,当审视现有可用存取技术时,该对话框60的结构却惊人地复杂。它包含264个AT产品要过滤的对象,以便只向最终用户揭示有意义的对象。通过存取系统200和其对逻辑UI树222的支持,拥有该对话框60的开发程序可以设定一些属性以将下述图6中所示的结构呈现给AT产品300。如图6所示,对于“运行”对话,开发程序可以指示飞行窗口图形62和“请打入你需要打开的程序、目录、文档的名字或因特网资源和窗口”63为感兴趣的。开发程序也可以指定包含记事本、字、计算器等的组合框64、以及确定65、取消66和浏览67按钮为感兴趣。这为开发程序提供了一种低成本机制来标记它们的单元体系,并因此,通过UI存取系统200产生它们的应用程序UI的逻辑表现。每个所示出的特征都可以由与该节点与逻辑树222中每个其它节点具有特定关系的一个节点表示。该逻辑表现为测试团队、AT产品或客户300提供了直接利益。虽然逻辑树222是用户最终感兴趣的东西,但原始树20也具有一些重要的功能。逻辑树222仅含有用户能够涉及的单元,而原始单元树20含有表示基础框架的执行结构的节点,例如22。例如,对于Win32UI分段,该树将包含表示HWND的节点。从某方面来说,原始树20是在逻辑单元树222和基础框架自身的本机单元树之间的“中间结构”。原始树20作为创建逻辑单元树222的基础使用,并且本机元素通过它首先插入到系统中。原始树20也可用于调试和测试。对于定点或描述哪里是特定有问题的节点是很有用的。基本原始单元节点的功能包括浏览原始单元树的方法;跳转到对应逻辑单元(存在的话)的方法;含有该单元“调试字符串”的属性,例如,对于HWND节点为“HWNDOx483FE”;以及其它“在场景基础架构之后”的方法。这些其它方法实现了命中测试和定位;事件;以及揭示框架可以很容易提供的属性(例如聚焦、有效)。原始单元树20含有节点22-33,它们表示了来自不同再现引擎的单元。该原始单元树用作再现引擎的开始点以将它们自身插入到存取系统200中,并从适应本机单元的轻适配对象(例如从Win32的HWND)创建成标准的逻辑树222。它还适用于处理主持转换(hostingtransition),其中一种技术主导另一种技术。由于原始单元树20是逻辑树222创建的基础,它可以用于检验逻辑树222是否完成、连接,并能用于检查未说明单元。该原始单元树20可进一步用于其它类似基础结构的任务例如,提供一些基础单元ID,并提供一些基础框架配置的单元属性,例如聚焦、有效和位置。原始单元树20并不是AT产品或客户300的主要信息源,并不用于逻辑浏览,且不揭示给最终用户。原始单元树20也不能用于获取树中的单元位置,因此,它能及时返回到一些未来的点。逻辑单元树222执行所有这些功能。原始单元树20通常可以从基础再现技术(HWND,Element)的原始单元机械地创建,而不需要表示逻辑单元的知识。因此,它可用于查找逻辑树222没有考虑到的原始单元。原始单元树20是一种有用的调试和诊断工具,因为它允许对获取的节点位置进行类似“堆栈(stack-dump)”的描述。而且,已知的系统中的树是基于代码特定标准,而难以用逆向技术执行。本方法使用的是通用的抽象“原始单元”类型,可以用任何基础再现技术执行和代表。为了获得原始单元树,调用原始单元根节点将获得桌面单元,通过验证其父节点为Null来确定该根节点,它是所有其它节点的最终祖先。为了获得其它单元,调用一种从特定点获得原始单元的方法将返回使用有效屏幕坐标的单元。在获得原始单元树之后,可以通过检查单元(父节点、继承节点和子节点)来检验和验证该树。在操作中,客户300可以使用关系,例如父节点、下一继承节点、前一继承节点、第一子节点、最后子节点等,来浏览原始单元树20。客户300可以从原始单元跳转到逻辑树222中的对应逻辑单元。事件机制当客户300想要保持被告知各个事件,客户300可以通过如图3所示的UI自动客户202进行登记以获得信息。客户300指定它希望接收的对象信息、它想要信息去的地方以及想要取回的属性列表。客户请求送到UI自动客户202。UI自动客户202能够监视桌面上的任何处理。UI自动服务器204保持对监听的客户300的追踪,并知道如何取回给UI自动客户202。UI自动客户202告知UI引擎206客户的兴趣,所以,UI引擎206知道何时告知UI自动服务器204该事件。UI引擎不需要使用客户的建议,但可以选择它以免总是要将事件通知UI自动服务器204,或者在仅当客户监听所有事件时通知UI自动服务器204。该建议在仅当一个客户在监听事件时如果UI引擎想要开启UI自动服务器204通知时很有效。UI引擎会这样做以避免UI可能的速度下降,和避免加载它并不需要的代码模块。UI引擎206随后告知UI自动服务器204一个UI事件。UI自动服务器204将所请求的逻辑单元返回给客户300,并将信息发送给客户300,所述信息包括客户300所请求的事件的属性。UI自动服务器204决定哪些信息是在客户所请求的范围,并且仅当该信息是感兴趣时才形成一个逻辑单元。形成逻辑单元包括在UI自动服务器侧的预取客户所指定的在处理事件时其要使用的属性组。例如,UI自动服务器204可以揭示组合框的逻辑单元。其范围是该组合框和其子节点。该客户300可以请求子节点/父节点/依赖关系来定义登记阶段期间的范围。在UI自动服务器204判定信息是否在所请求范围内之后,就创建一个逻辑单元。该UI自动客户202通过对从UI自动服务器204接收所请求信息的目标应用程序进行对话,并将对象发送到客户300上的合适空间来为客户300服务。当客户300登记以接收事件通知时,就创建UI自动服务器204。作为示例,UI引擎206可以是运行微软Word字处理应用程序。客户300登记需要名字属性的变化。客户的登记引起创建UI自动服务器204。客户的登记也建议UI引擎206开始告知UI自动服务器204需要名字属性。UI引擎206没有取得范围信息。UI引擎206调用服务器侧的一个API。UI引擎206规定1)哪个属性改变;2)属性的新值;以及3)可能的旧值。UI自动服务器204的创建是基于客户300感兴趣的事件,且从而知道感兴趣的事件、属性、客户和范围,因此,它就能知道是否有客户300对创建的逻辑单元感兴趣。如果有超过一个的客户300通过一个特定的UI自动服务器204登记事件,并且这些客户300登记的是需要相同的事件,并随同返回的逻辑单元要求大量取得属性,那么当UI自动服务器204将事件发送回客户300时,每个客户都将得到随同逻辑单元返回的所请求大量取得属性的组合。对于每个进行监听的客户300,UI自动服务器204告知客户300,将与事件相关的逻辑单元传送给客户。UI自动服务器204仅创建一个逻辑单元。这是对现有技术的很大改进,现有技术中,要求每个客户300都请求其自身的事件源对象副本。如果当客户登记事件时,UI引擎206不利用UI自动客户建议,UI引擎206可以询问UI自动服务器204是否有任何存取客户300在监听,并且如果没有一个在监听,就可以避免创建信息和将其发送给UI自动服务器204的工作。例如,屏幕阅读器是客户300,并规定了它想要信息送到哪里、聚焦变化对象以接收事件以及感兴趣的特定属性列表。向UI引擎206提供建议,并且引擎知道它应该将事件发送到UI自动服务器204。依据检测的聚焦变化,UI引擎206通知UI自动服务器204。UI自动服务器204将其转换成熟知的接口并将事件和对象发送给UI自动客户202。UI自动客户202将对象发送到客户300中的合适空间。上述组件与已有系统相比,其改进在于消除了在核心程序中对事件的中央存储。取而代之以UI自动服务器204了解所有对其运行的上下文程序中取得信息感兴趣的客户300。核心存储的消除还创建了一种更加对等的互动,因为,UI自动服务器204实现了在核心程序中先前所执行的功能。本发明的存取系统200为客户300提供了指定其想要了解的东西的能力,这样,使用UI自动服务器204在服务器侧就实现了过滤。图7是有关事件登记和通知方法的过程的流程图。在步骤80,客户300请求事件通知。在步骤82,UI自动客户202将请求发送给UI自动服务器204。在步骤84,UI自动客户建议UI引擎206它要求通知。在步骤86,UI自动服务器204从UI引擎206接收通知。在步骤88,UI自动服务器204过滤所接收的信息。在步骤90,如果所接收的信息被查明是用户不感兴趣的,UI自动服务器204就丢弃该信息,并在步骤92继续等待通知。或者,如果在步骤90发现该信息是感兴趣的,在步骤94,UI自动服务器204就创建逻辑单元,并将其发送给UI自动客户202。在步骤96,UI自动客户202将所接收的信息放入客户300中其合适的位置。存取系统200的事件机制210允许客户300登记以接收UI中属性变化、控制结构的树变化、多媒体事件和相关信息的事件通知。没有这些能力的话,客户300必须连续调查系统中所有的UI单元,以验证是否有任何信息、结构或状态改变。存取系统200事件机制210也允许客户300接收非处理(out-of-process)事件,请求随事件通知一起返回的属性集合,并为事件登记多个单元。事件机制210揭示了AT产品或测试应用程序用于登记事件的接口;AT产品执行用于接收事件通知的对象的接口;以及控制执行程序用于通知UI事件的事件引擎的接口。事件机制210用于允许AT产品和测试应用程序独立于用于再现UI的UI引擎来接收事件,并允许AT产品和测试应用程序追踪顶层应用程序窗口并聚焦,而不用顾虑基础技术。在可用情况下,将事件与来自应用程序逻辑单元树222的逻辑单元相关联。在逻辑单元不可用的情况下,将事件与人们可读字符串或其它已知代表事件源的对象相关联。事件机制210基于在事件登记期间用户提供的选择来进行过滤。通过在服务器处使用客户过滤选择,在创建事件相关数据并将其通过跨处理发送给客户之前,事件机制210通过减少大量交叉处理调用从本质上改善了非处理性能。事件机制210提供了一种方式,在事件登记期间指定对于事件感兴趣的逻辑单元的属性。这进一步减少了许多交叉处理调用。该事件机制210可以进行扩展,而不需要对主要的操作系统(OS)进行改变。虽然,事件机制210使用经管理的代码实现,但未经管理的应用程序可以通过COM的互用性对其进行访问。事件机制210可以使得客户被告知许多类型的事件。一种类型的事件是顶层窗口事件。顶层窗口事件包括与菜单和组合框落下或任何将桌面作为父节点的特征相关的事件。另一类型的事件是聚焦事件。客户300经常请求一种追踪聚焦的方法。其它类型的事件包括属性变化事件和逻辑结构变化事件。属性变化事件是在当逻辑单元的属性发生变化时被激活。逻辑结构变化事件是在当逻辑单元树结构改变时被激活。事件也可以从控制模式中激活。从控制模式中激活的事件需要是可扩展的,并因此,这些事件由GUID识别。当登记时,可接受任何GUID值。对于任何新的控制模式,其证明的事件需要是唯一的GUID。AT产品可能需要进行修改以监听新控制模式事件。监听程序也需要能涵盖这些事件。例如,定向测试可能需要将这些事件限制在特定应用程序或在应用程序中控制。该控制模式定义了什么是源,而事件消费者将需要参照该部分的记录,以便了解如何使用源单元和事件争论对象。另一种类型的事件是多媒体事件。多媒体可以包括声音、视频和动画。该方法将支持多媒体事件,并通知客户一些动作,包括“停止”、“暂停”、“快进”、“重复”和“静音”。简单的声音事件可以独立于多媒体事件进行处理。简单的声音事件表示单独、短促的声音,其存在是为了向用户传达某些事件的发生,而不是其声音本身。简单的声音事件可以包括当新邮件到达时播放的声音;当膝上型电脑电量低时产生的声音;或当消息框用IconExclamation类型显示时播放的声音。另一种类型的事件是软焦点事件。软焦点事件出现在桌面上,但停留在后台中。一些软焦点的示例是弹出式帮助窗口,在通知区域中显示“有新的更新可用”;在任务栏中的闪烁图标,指示需要引起聚焦的后台应用程序;以及当打印开始和结束时,在通知盒(tray)中出现和消失的打印机图标。这些事件可能看上去与其它事件类别有某些重叠(多媒体可以涉及软焦点也涉及的动画事件)。然而,该事件将依据其传送给用户的东西来分类,而不是依据其如何被传送来分类。客户侧API310和提供者侧API440提供了一种事件通知方法,它支持上述所列举类型的事件类型。这些方法将结合附图8-10在下面进一步描述。控制模式存取模型提供了独特的方法来分类和揭示特定UI单元或控制所支持的功能。存取模型定义了一组公共控制模式,每种模式定义了UI状态的一个方面,以取代已有技术中将功能和特定控制类型(例如按钮、编辑框或列表框)相关联。因为这些模式彼此独立,可以将它们组合以描述特定UI单元所支持的完整功能集。例如,存取系统200将单元作为支持调用控制模式来描述,而不是以其类名例如按钮来描述。一种控制模式定义了结构、属性、事件和该单元所支持的方法。因此,这些模式不仅允许客户查询控制状态,它们也允许其通过使用为特定模式设计的接口来可编程地操作控制。例如,SelectionContainer模式提供了对所选择项进行查询、选择或取消选定特定项、或判定控制是否支持单选或多选模式的方法。为存取系统300目前定义的控制模式包括1)SelectionContainer;2)Hierarchy;3)Invokable;4)SimpleGrid;5)Text;6)Value;7)RepresentsObject;8)Scrollable;9)Sortable;10)Drawing;以及11)OtherContainer。这种技术使得控制开发程序能够执行新类型控制,同时仍然具有精确定义的将其状态揭示给AT产品和测试脚本的方法。如果引入新类型状态,就能定义新控制模式来表达所要求的功能。辅助技术产品和测试脚本现在可以写成理解如何和每个模式工作,而不是和每个UI控制工作。因为存在的控制模式远远少于控制类,因此,这种技术使得所需要的代码最小。这种方法也促进了一种更加灵活的层次结构,该结构能有效询问和操作新控制(只要它们支持已知的控制模式)。下述表格提供了公共控制的一些示例以及它们将支持的模式。表格1更多的特定接口将用于揭示与公共控制模式相关的功能。这些模式的示例包括1)选择管理容器;2)网格布局容器;3)含有值的UI单元;4)代表对象(文件、email等)的图标;以及5)可调用的UI单元。通常,这些模式与特定控制并非紧密相连,并且不同的控制可以执行相同的模式。例如,列表框、组合框和树图都执行“选择管理容器”的模式。一些控制可能执行多种控制,如果满足选择网格将既执行“网格布局容器”模式又执行“选择管理容器”模式。在以前的应用程序中不存在单独的“角色(role)”属性,而是使用两种单独的机制。控制模式判定一控制的可用的功能,而人们可读可定位属性提供用户可理解的控制类型名字,例如“按钮”、“列表框”等。系统API图8示出本发明一实施例中客户侧API305的详细情况。客户侧API305可以包括一组核心类310。该核心类310包括一个或更多的自动类312、逻辑单元类314以及原始单元类316。客户侧API305还可以包括一个或更多的控制模式类320、输入类340以及辅助类350。这些类型的类中的每个类将在下面详细描述。客户自动类312为客户300提供了一种UI自动方法。客户自动类312含有并不是针对任何UI单元定制的方法。客户自动类312可以提供一种通过某点、窗口句柄或桌面根单元获得逻辑或原始单元的方法。客户自动类312可以另外提供基于输入规则查找逻辑单元的方法。客户自动类312最好还包括对事件通知进行登记和取消登记的方法。自动类312最好还提供加载代理DLL,检索属性局部名字和控制模式,以及执行单元比较的助手功能。客户自动类312还包括让客户300监听事件的方法。自动类312所提供的一些方法在下表中加以概括。表2在操作中,如果客户300需要为用户获得有关应用程序的信息,客户300就找到一个按钮并按下,观察按钮上的文字。客户300可以调用一种方法,例如如表2所示的查找逻辑单元(FindLogicalElement)的方法。客户侧API305将返回一个值,该值对应于客户侧接口220的逻辑树222中的一个位置。通过逻辑树222,存取系统200不用考虑所使用的应用程序就能为客户300提供了UI的抽象视图。抽象模型包括结构、属性、事件和功能,而列表框、按钮或其它UI组件可以期望彼此共享。客户侧API305另外包括逻辑单元314。逻辑单元314提供获得公共单元属性的字段、方法和属性。如上所述,逻辑单元代表了逻辑树222中的UI单元,例如界定矩形、聚焦、有效、可点击点、运行时间、固定标识符以及名字。逻辑单元类314还可以提供在单元,例如第一子节点、最后子节点、下一继承者和父节点中进行浏览的工具。逻辑单元类314还可以提供获得对一单元的特定模式或获得由该单元所支持的所有模式的工具。逻辑单元类314含有单元在逻辑单元树222中所使用的字段、属性以及方法。表3客户侧API305另外包括原始单元类316。原始单元类316提供了遍历(traversing)原始单元树的类似技术。原始单元类316包含用于访问原始单元树中单元的字段、属性和方法。表4客户侧API305另外包括输入类340。输入类340可用于模拟鼠标、键盘和其它类型的输入。输入类340允许通过输入方法例如键盘、笔和鼠标进行编程(programmatic)输入。一个示例输入类示于下表。表5客户侧API305另外包括UI自动控制模式类320。UI自动控制模式类320可以揭示可编程访问由逻辑单元揭示的特定功能的字段、属性和方法。UI自动控制模式类320帮助用户与UI存取系统200所定义的控制模式进行互动。例如,应用程序窗口模式方法将功能揭示给对应用程序的编程工作。该功能可以允许对子窗口或表示应用程序中工具栏、菜单、滚动条和系统菜单的逻辑单元位置进行配置。控制模式类320可以包括应用程序窗口模式(ApplicationWindowPattern)类。ApplicationWindowPattern类揭示了通常与顶层应用程序窗口相关的状态和信息。客户300可以使用这个类来平铺或层叠应用程序的多文档界面(MDI)子界面,查找其任务栏上的按钮,以及定位其用户界面的已知区域,例如工具栏和菜单。下表说明了本发明一个实施例的ApplicationWindow模式类。表6控制模式类320还可以包括用于展开和收缩单元的类,以提供一种展示和隐藏这些类的内容的机制(ExpandCollapsePattern)。ExpandCollapsePattern类作为ExpandCollapse模式的封装类(wrapperclass)。ExpandCollapsePattern类含有客户300用来操作可以扩展(显示)或收缩(隐藏)内容的字段、属性和方法。下表说明了ExpandCollapsePattern类的实施例。表7控制模式类320还可以包括网格项模式(GridItemPattern)类,允许客户300快速判定所揭示的项是否是网格的一部分。如果项是网格的一部分,GridItemPattern类就依据行/列坐标和间隔来帮助判定该项处于网格的什么位置。GridItemPattern类最好包含客户300用来操作揭示在网格中单元格功能的控制的字段、属性和方法。下表说明了根据本发明实施例的GridItemPattern类。表8控制模式类320还可以包括层次项模式(HierarchyItemPattern)类,它表示了与其它单元(例如TreeView控制中的单元)彼此具有层次关系的单元。HierarchyItemPattern类含有自动客户300用于操作独立于UI单元在逻辑树222中的关系,而揭示它们之间层次关系的控制的字段、属性和方法。下表说明了根据本发明实施例的HierarchyItemPattern类。表9控制模式类320还可以包括激活模式(InvokePattern)类,它表示具有与它们相关的单一、明确动作的对象。相关UI组件的实例包括按钮;超链接;菜单项;单选按钮和复选框。InvokePattern类含有自动客户300用于操作当激活时引起单一、明确动作发生的单元的字段、属性和方法。下表说明了根据本发明实施例的InvokePattern类。表10控制模式类320还包括多视图模式(MultipleViewPattern)类,作为用于多视图模式单元的封装类。多视图模式单元是可以在一信息集的多种表示之间切换的单元。该MultipleViewPattern类含有自动客户300用于操作具有在同一信息集多种表示之间进行切换的功能的单元的字段、属性和方法。下表说明了根据本发明实施例的MultipleViewPattern类。表11控制模式类320还包括范围值模式(RangeValuePattern)类,它揭示了反映控制在一个有限范围内管理值的能力的相关属性集。RangeValuePattern类传送控制有效的最小和最大值及其当前值。RangeValuePattern类含有自动客户300用以取得单元当前值和值域的字段、属性和方法。下表说明了根据本发明实施例的RangeValuePattern类。表12控制模式类320还包括滚动模式(ScrollPattern)类,它表示可以改变它们可视区域的UI单元。ScrollPattern类包含自动客户300用以操作能通过滚动改变其可视区域部分的单元的字段、属性和方法。下表说明了根据本发明实施例的ScrollPattern类。表13控制模式类320还包括选择模式(SelectionPattern)类,它表示管理选择的容器。相关选择项模式(SelectionItemPattern)类包含自动客户300用以操作能被选择和取消选择的单元的字段、属性和方法。下表说明了根据本发明实施例的SelectionPattern类和SelectionItemPattern类。表14表15控制模式类320还包括分类模式(SortPattern)类。SortPattern类含有自动客户用以操作可对其子单元分类的容器单元的字段、属性和方法。下表说明了根据本发明实施例的SortPattern类。表16控制模式类320还包括值模式(ValuePattern)类,以代表表示一个值的UI单元。ValuePattern类含有客户300用以操作具有与其相关的值的单元的字段、属性和方法。下表说明了根据本发明实施例的ValuePattern类。表17控制模式类320还包括可视信息模式(VisualInformationPattern)类,它可以用于表示传送信息给用户的图像或动画相关的信息。VisualInformationPattern类含有自动客户300用以操作具有传送信息给用户的图像或动画的单元的字段、属性和方法。下表说明了根据本发明实施例的VisualInformationPattern类。表18控制模式类320还包括窗口模式(WindowPattern)类,它作为窗口模式的封装类。WindowPattern类含有自动客户300用以操作用户桌面上窗口的字段、属性和方法。下表说明了根据本发明实施例的WindowPattern类。表19客户侧API300还包括辅助类350。该辅助类包括表示属性、事件和模式识别符的多个类以及使用事件机制和输入特征的助手类。辅助类350可以包括自动标识符(AutomationIdentifier)类。AutomationIdentifier类是用于基于对象识别的识别符的基类。由于仅例示了导出类,因此,这个类有效地抽象化。辅助类350另外包括表示用于在存取系统200中识别事件的一种类型的自动事件(AutomationEvent)类。辅助类350还包括自动模式(AutomationPattern)类,表示用于在存取系统200中识别控制模式的一种类型。辅助类350还包括自动属性(AutomationProperty)类,表示用于在存取系统200中识别属性的一种类型。辅助类350可以进一步包括自动事件参数(AutomationEventArgs)类,表示用于事件的控制模式或定制事件参数。客户300接收该类的实例(instance)和定制事件。AutomationEventArgs类用于将有关自动事件的信息传送给客户300。辅助类350还可以包括用于UI事件的自动属性改变事件参数(AutomationPropertyChangedEventArgs)类。客户300接收该类的实例和属性变化事件。AutomationPropertyChangedEventArgs类用于将有关属性变化的事件的信息传送给客户300。辅助类350还可以包括逻辑结构变化事件参数类。用于UI事件的LogicalStructureChangedEventArgs类为客户300提供该类的实例以及逻辑树变化的事件。LogicalStructureChangedEventArgs类用于将有关逻辑结构变化的信息传送给客户300。辅助类350还可以包括顶层窗口事件参数(TopLevelWindowEventArgs)类,用于与UI事件一起使用为客户300提供具有定制事件的该类的实例。TopLevelWindowEventArgs类用于将有关顶层窗口事件的信息传送给客户300。顶层窗口是父节点为桌面的窗口。术语“已开启(opened)”的使用表示新的顶层窗口出现在用户面前。术语“已关闭(closed)”的使用表示顶层窗口已经撤消。辅助类350还可以包括树加载事件参数(TreeLoadEventArgs)类。该TreeLoadEventArgs类是用于UI事件的定制事件参数类。客户300可接收该类的实例和树加载事件。TreeLoadEventArgs用于将有树加载事件的信息传送给客户300。辅助类350还可以包括Vkey类,它为输入相关的方法提供了常量。辅助类350还可以包括NoClickablePointException。当在可点击点的逻辑单元中出现错误时就产生该异常。当界定矩形为空,没有宽或高,或该点的逻辑单元已变化就会发生错误。辅助类350还可以包括执行几个类以接收事件通知。聚焦变化事件参数(FocusChangedEventArgs)用于将有关聚焦变化事件的信息传送给客户。如图9所示,提供者侧API440包括提供者自动类442、提供者自动接口448和提供者原始单元接口450。提供者侧API440还包括控制模式提供者接口460和辅助类480。辅助类480可以与辅助类350共享使用和通信信息,例如属性识别符、事件识别符、模式识别符和基本类型(如表示矩形或点)的类的类型。其它特征可以是对提供者辅助类480独有,或对客户辅助类350所独有的。例如,Vkey类就仅存在于客户辅助类350中。提供者自动类442最好包括自动互用性提供者(AutomationInteropProyider)类502,如图10所示。AutomationInteropProvider类502可以包括具有Win32或第三方自动执行的存取系统200所使用的方法。AutomationInteropProvider类502含有Win32或第三方UI自动提供者侧执行所使用的属性和方法。下表说明了根据本发明实施例的AutomationInteropProvider类502。表20自动提供者(AutomationProvider)类500是含有具有窗口客户平台(WindowsClientP1atform)的存取系统200所使用的方法的相似类(similarclass)。提供者侧API440还包括提供者自动接口448。提供者自动接口448可以包括自动属性互用性提供者(IAutomationPropertyInteropProvider)接口447,由Win32或第三方执行以揭示存取系统200默认揭示的属性上的附加属性。提供者自动接口448还可以包括自动属性提供者(IAutomationPropertyProvider)接口449。该接口449类似于接口447,但可以由本机窗口客户平台提供者执行以揭示除存取系统200默认揭示的那些属性之外的属性。提供者原始单元接口450可以包括原始单元提供者(IRawElementProvider)接口456。IRawElementProvider接口456定义了方法,所述方法包括由本机窗口客户平台、Win32或第三方提供者执行并由存取系统200调用以返回相关单元,例如第一子节点、最后子节点、下一继承者和父节点,和返回特定或所有本机和UI自动属性。IRawElementProvider接口456进一步为控制模式返回提供者对象。IRawElementProvider接口456由存取系统200执行,并与特定单元相关的功能的提供者进行互动。在下表中提供了一种IRawElementProvider接口456实施例的实例。表21附加提供者原始单元接口450可以包括原始单元上下文互用性提供者(IRawElementContextInteropProvider)接口452。该接口452可以由Win32或第三方提供者执行。该接口452用于管理与任何特定单元无关的事件和其它功能。而附加原始单元接口450可以包括原始单元上下文提供者(IRawElementContextProvider)接口458,并可由本机窗口客户平台提供者执行,并用于管理与任何特定单元无关的事件和其它功能。一个IRawElementContextProvider接口458的实施例在下表中示出。表22提供者侧API440可以包括控制模式提供者接口460。每个控制模式具有提供者接口460,由将控制模式揭示给存取系统200的对象执行。例如,应用程序窗口提供者(IApplicationWindowProvider)接口揭示了与应用程序顶层窗口相关的状态和信息。下述的控制模式提供者接口460包括可以由基于HWND和第三方提供者执行的互用性提供者(InteropProvider)接口。控制模式提供者接口460还可以包括可以由窗口客户平台提供者机内执行的提供者接口。控制模式提供者接口460还可以包括应用程序窗口提供者(IApplicationWindowProvider)接口。该IApplicationWindowProvider或IApplicationWindowInteropProvider接口可以揭示通常与顶层应用程序窗口关联的状态和信息。该接口通常可以由提供者执行以揭示操作应用程序主窗口的功能。控制模式提供者接口460还可以包括展开和收缩提供者(IExpandCollapseProvider)接口或IExpandCollapseInteropProvider接口。该接口揭示了能展开以显示更多内容或收缩以隐藏内容的控制能力。该IExpandCollapseProvider接口可以结合HierarchyItem模式(下面将描述)得到支持提供类似树的状态,但它对于单独的开启和关闭控制还是相关的。诸如工具栏、组合框和菜单的UI单元可包括有关的执行。控制模式提供者接口460还可以包括网格提供者(IGridProvider)接口或IGridInteropProvider接口。该IGridProvider接口揭示了基本网格功能,包括网格大小和特定单元格的信息运动。网格项提供者(IGridItemProvider)或IGridItemInteropProvider可以提供附加的控制模式提供者接口460。IGridItemProvider接口表示在网格中的项。该接口可以仅包括属性,而不包含方法。IGridItemProvider或IGridItemInteropProvider接口由提供者执行以对操作揭示网格中单元格功能的控制的功能进行揭示。控制模式提供者接口460还可以包括层次项提供者(IHierarchyItemProvider)或IHierarchyItemInteropProvider接口。IHierarchyItemProvider或IHierarchyItemInteropProvider接口揭示和允许客户300独立于UI单元在逻辑树222中的关系来遍历它们之间的层次关系。层次关系定义为非圆形(noncircular)的。执行该接口的UI单元包括菜单和列表视图控制。附加控制模式提供者接口460可以包括激活提供者(IInvokeProvider)或IInvokeInteropProvider接口。该激活提供者接口可以由与项具有单一、明确关系的动作的对象来执行。这些对象通常是无状态的(stateless),激活它们不会对它们自身的状态发生变化,但会在应用程序的更大上下文范围中引起变化。执行IInvokeProvider接口的UI单元包括按钮和超链接菜单项。多视图提供者(IMultipleViewProvider或IMultipleViewInteropProvider)接口提供附加控制模式接口460。该多视图提供者接口可以揭示在同一信息、数据或子节点集中多种表示之间切换的单元能力。该模式应该在控制当前内容视图的容器上执行。控制模式提供者接口460可以包括范围值提供者(IRangeValueProvider)或(IRangeValueInteropProvider)接口。范围值提供者接口揭示了反映管理有限范围内值的一控制的能力的相关属性集。接口将传送一控制的有效最小和最大值及其当前值。执行该接口的UI单元包括在进程栏和滚动条上的数字旋转器(numericspinner)。滚动提供者(IScrollProvider或IScrollInteropProvider)接口可以作为附加控制模式提供者接口460提供。接口揭示了通过滚动其内容改变其可视区域部分的一控制的能力,该区域对用户是可见的。该接口表示了滚动其内容,例如列表框、树视图或其它保持内容区域大于控制的可视区域的容器的UI单元。下表示出一种IScrollInteropProvider接口的实施例。表23附加控制模式提供者接口460包括由标识选择的提供者(ISelectionByIDProvider或ISelectionByIDInteropProvider)接口。该接口表示为容器单元提供在其所含有的项之间进行选择。标识选择提供者接口是用于不具有逻辑单元子节点的控制的提供者侧接口。客户将把该方法看作如同该控制具有作为子节点的逻辑单元的方法一样。执行该接口以帮助提供者揭示操作可选择和未经选择容器中单元的功能。该接口实施例在下表中示出。表24控制模式提供者接口460还可以包括选择提供者(ISelectionProvider或ISelectionInteropProvider)接口。该选择提供者接口表示管理选择的容器,并且由提供者执行以揭示操作含有可选择单元的单元的功能。该接口的控制模式提供者接口460还可以包括分类提供者(ISortProvider或ISortInteropProvider)接口。该接口揭示容器当前分类次序,并允许客户可编程地重新分类其单元。值提供者(IValueProvider或IValueInteropProvider)接口可以由控制模式提供者接口460执行以表示和操作具有相关值的单元。可视信息提供者(IVisualInformationProvider或IVisualInformationInteropProvider)接口可以包含在控制模式提供者接口460中以揭示有关传送信息给用户的图像或动画的信息。窗口提供者(IWindowProvider或IWindowInteropProvider)接口还可以包括在控制模式提供者接口460中以揭示改变单元在屏幕位置或大小以及改变可视状态并关闭它的一单元的能力。下表示出该接口的实例。表26提供者侧API440还可以包括辅助类480。该辅助类480基本等同于在客户侧API305中的类。如上所述,客户和提供者可以共享辅助类。结合图10进一步描述该特征。图10示出客户侧API305、存取系统核心200和服务器侧API440之间的互动。该客户应用程序300执行自动类312、逻辑单元类314、原始单元类316或控制模式类320以通过存取系统核心201获得信息。客户应用程序300还执行客户辅助类350和输入类340。图10说明结合使用Win32Run12的执行A(10)和使用WCPRun的执行B(20)的提供者侧API440。执行A按需使用自动互用性提供者接口502、原始单元提供者接口456、原始单元上下文互用性提供者接口452以及控制模式接口460。执行B按请求使用自动提供者接口500、原始单元提供者接口456、自动属性提供者接口448、原始单元上下文提供者接口458和控制模式接口460。执行10和20都使用提供者辅助类480。如上所述,提供者辅助类基本与客户辅助类350相同,或可以与客户辅助类350共享一些类型,如共享辅助类510所示。如上所述,共享辅助类510可以包括客户和提供者对传送信息,例如属性标识符、模式标识符和事件标识符的类型进行共享。在操作中,客户侧API305允许客户300取得逻辑树。功能包括1)从点到点的逻辑单元;2)来自事件的逻辑单元;3)当前聚焦的逻辑单元。如上所述,逻辑单元表示UI组件,可能是一控制、控制的一部分、或一容器或逻辑分组(即对话、窗格或框架)。控制可以根据其功能显著变化。因此,不同的接口用于表示与特定控制类型关联的功能。然而,这些特定控制接口是从表示对所有控制都公用的功能的公用基本接口中获得。公用基本接口含有核心类310,它包括1)用于浏览逻辑树222的方法;2)取得属性值的通用方法;3)访问所支持特定控制接口的方法。在浏览逻辑树222中,每个基础应用程序UI技术将为浏览提供其自身的技术。为开始使用应用程序中的存取系统,客户300可以做下列事之一1)使用来自自动类312的“AddTopLevelWindowEventHandler”方法以揭示事件中在桌面上或句柄中出现的新UI,登记其它事件,并由此从任意进程接收事件;2)从自动类312中使用一种“查找”方法以定位感兴趣的UI和把特定UI段作为目标;3)使用自动类312中一些其它的方法以揭示感兴趣的UI,例如查找窗口句柄或屏幕上某点,并使用该句柄或点,获得作为监听事件参照使用的逻辑单元;或4)使用自动类312中的“AddFocusChangedEventHandler”以追踪输入聚焦并在当前聚焦的UI上登记事件。客户侧API305和服务器侧API440用于满足客户300的需要。下述实例用于说明客户如何使用客户侧API305和随后如何激活服务器侧API440以向客户300提供用户接口信息。顶层窗口事件包括与菜单和组合框落下或任何将桌面作为父节点的特征相关的事件。在本发明的实施例中,AddTopLevelWindowEventHandler方法用于接收开启和关闭顶层窗口的通知。调用AddTopLevelWindowEventHandler将获得在当前桌面上新顶层窗口开启或顶层窗口关闭的通知。RemoveTopLevelWindowEventHandler方法提供了一种机制以停止接收在桌面上顶层窗口开启或关闭的通知。该方法使用调回(callback)对象以识别该听众。因此,到RemoveTopLevelWindowEventHandler方法的对象与到AddTopLevelWindowEventHandler的对象相同。对于每个新打开的顶层窗口从提供者侧API440调用一方法。同样,一旦当顶层窗口关闭,存取系统200可以调用一方法。为了接收这些通知,客户300调用AddTopLevelWindowEventHandler方法。另一类型的事件是聚焦事件。客户300经常请求一种追踪聚焦的方法。在微软窗口OS中,这是很难实现的。例如,当下拉菜单(例如在微软的Word中的文件菜单),在用户沿每个项向下移动光标时,菜单中的项就获得聚焦。当该菜单关闭(例如用户按下ESC键),就不会发送聚焦事件。实际上,对聚焦变化感兴趣的客户必须监听大量事件,并找出这些事件中哪些事件逻辑上表示聚焦变化。在本发明的一个实施例中,自动类312中的AddFocusChangedEventHandler方法可以用于告知监听者聚焦变化事件。客户300可以规定随同该方法或其它事件登记方法返回一组属性。客户300调用RemoveFocusChangedEventHandler方法以停止接收聚焦变化的通知。该方法使用调回对象来识别该监听者,并且在此情况下,给RemoveFocusChangedEventHandler方法中的对象和给AddFocusChangedEventHandler过程中的对象相同。当聚焦变化时,为了告知客户300,存取系统200将从提供者侧自动类442中调用例如RaiseFocusChangedEvent的方法。属性变化事件是在当逻辑单元的属性发生变化时被激活。在本发明的实施例中,客户300从自动类312中调用AddPropertyChangedEventHandler方法以接收属性变化的通知。当在AddPropertyChangedEventHandler所规定的逻辑单元树中的一个逻辑单元上的属性值发生变化,存取系统200就从提供者侧API440中激活提供者侧方法。一个范围参数指示事件应该针对哪些单元被激活。例如,传递窗口的根逻辑单元和对后代的请求限制了对该窗口的属性变化调回。如果范围参数设定为树中的所有单元,那就忽略所述范围,并将把桌面上出现的任何特定属性变化都发送。客户300可以多次调用具有不同属性集和/或不同调回对象的AddPropertyChangedEventHandler。存取系统200提供的通知指示了所改变的属性;新属性值;以及如果可提供的话还包括旧属性值。客户300将调用RemovePropertyChangedEvenHandler方法来停止接收属性变化的通知。该方法可以使用范围单元和调回对象来识别该监听者,并且在这种情况下,传送的对象必须与传送给AddPropertyChangedEventHandler的对象相同。提供者自动类442包括RaiseAutomationPropertyChangedEvent方法以告知客户300自动属性的变化。客户自动类312中的AddAutomationEventHandler方法可以使客户300接收控制事件。范围参数可用于指示事件应该针对哪些单元被激活。例如,传递窗口的根逻辑单元和对后代的请求将限制该窗口的事件。如果需要树中的所有单元,那就将把桌面上的所有事件都发送。RemoveAutomationEventHandler方法可以用于停止接收控制的事件。该方法可以使用范围单元、调回对象和事件识别符以识别监听者。在这种情况下,传送的对象必须与传送给AddAutomationEventHandler方法的对象相同。提供者自动类442包括RaiseAutomationEvent方法以告知客户300事件。当客户应用程序300激活AddAutomationEventHandler方法,而特定控制事件也被激活且该事件源是AddAutomationEventHandler中规定的逻辑单元树中的一个逻辑单元时,存取系统200就从提供者侧API440调用方法。当控制事件被激活,通常就有特定事件的信息可用。可以调用RemoveAllEventHandlers方法来停止接收任何事件。这是一种在客户应用程序关闭之前进行清空的快速方法。当终止应用程序时,最好使用该撤消方法。当逻辑单元树结构变化时,就激活逻辑结构变化事件。执行AddLogicalStructureChangedEventHandler方法以接收在逻辑单元树中结构变化的通知。当逻辑单元被加入、撤消或无效,就调用特定调回对象上的方法。可以调用RemoveLogicalStructureChangedEventHandler方法以停止接收逻辑单元树变化的事件。该方法可以使用调回对象和范围单元以识别监听者。在这种情况下,传送的对象必须与传送给AddLogicalStructureChangedEventHandler的对象相同。提供者自动类442包括RaiseLogicalStructureChangedEvent方法以告知客户300逻辑结构的变化。UI自动服务器或提供者侧API440包括服务器或基础UI引擎可以调用的方法以完成属性变化通知。当UI变化时,服务器400可以调用这些通知方法以产生合适的参数。本发明已经结合特定实施例进行了描述,其目的是为了说明而不是进行限制。在不背离本发明的范围时,其它实施例对于本领域的熟练技术人员来说都是显而易见的。如上所述,可以看出本发明能够实现上述所有目标,并且该系统和方法具有其他显而易见和固有的优点。可以理解某些特征及其子集合是有用的,并无需参照其他特征及子集合使用。这也在该权利要的范围中。权利要求1.一种在为客户提供用户接口信息的存取系统中使用的工具系统,该存取系统包括客户侧和提供者侧,该工具系统包括含有用于查询用户接口信息的客户自动类的客户侧自动工具,所述客户自动类包括事件登记工具和逻辑单元揭示工具;以及用于为客户提供用户接口信息的提供者侧自动工具,所述提供者侧自动工具包括具有用于为客户提供事件信息的工具的提供者自动类。2.如权利要求1所述的系统,其特征在于,进一步包括客户侧逻辑单元工具,用于表示用户接口单元。3.如权利要求2所述的系统,其特征在于,进一步包括客户侧原始单元工具,用于表示原始单元树中的单元。4.如权利要求1所述的系统,其特征在于,进一步包括客户侧输入类,用于提供模拟输入方法。5.如权利要求4所述的系统,其特征在于,进一步包括用于模拟鼠标输入和键盘输入的工具。6.如权利要求2所述的系统,其特征在于,进一步包括客户侧控制模式类,用于允许客户与存取系统系统控制模式交互。7.如权利要求6所述的系统,其特征在于,所述客户侧控制模式类包括应用程序窗口模式类,用于揭示与应用程序主窗口相关的信息。8.如权利要求6所述的系统,其特征在于,所述客户侧控制模式类包括展开和收缩模式类,用于操作可以显示和隐藏的内容。9.如权利要求6所述的系统,其特征在于,所述客户侧控制模式类包括网格项类,用于如果项是网格的一部分就揭示。10.如权利要求6所述的系统,其特征在于,所述客户侧控制模式类包括层次项模式类,用于表示UI单元,所述单元独立于逻辑树中UI单元之间的关系来揭示它们之间的层次关系。11.如权利要求6所述的系统,其特征在于,所述客户侧控制模式类包括激活模式类,用于表示具有单一关联作用的对象。12.如权利要求6所述的系统,其特征在于,所述客户侧控制模式类包括多视图模式类,用于操作可以在多种表示之间进行切换的单元。13.如权利要求6所述的系统,其特征在于,所述客户侧控制模式类包括范围值模式类,用于揭示控制的最小和最大值。14.如权利要求6所述的系统,其特征在于,所述客户侧控制模式类包括滚动模式类,用于操作可以通过滚动改变可视性的单元。15.如权利要求6所述的系统,其特征在于,所述客户侧控制模式类包括选择模式类,用于操作可以选择和不选择的容器中的单元。16.如权利要求6所述的系统,其特征在于,所述客户侧控制模式类包括分类模式类,用于操作可以分类子单元的容器单元。17.如权利要求6所述的系统,其特征在于,所述客户侧控制模式类包括值模式类,用于表示表达值的用户接口单元。18.如权利要求6所述的系统,其特征在于,进一步包括窗口模式类,用于操作用户桌面上的窗口。19.如权利要求1所述的系统,其特征在于,进一步包括辅助工具,用于执行附加功能。20.如权利要求1所述的系统,其特征在于,进一步包括提供者侧自动接口,用于揭示附加属性。21.如权利要求1所述的系统,其特征在于,进一步包括提供者原始单元接口,用于从原始单元树中返回相关单元。22.如权利要求1所述的系统,其特征在于,进一步包括控制模式提供者接口,用于揭示与定义的控制模式相关的状态和信息。23.一种在为客户提供用户接口信息的存取系统中执行的客户侧工具系统,该存取系统包括一种从提供者侧向客户侧传送用户接口信息的机制,以及有选择地揭示用户接口信息的逻辑树,所述客户侧工具包括客户侧自动机制,包括从提供者侧查询用户接口事件信息的客户自动类;以及客户侧逻辑单元机制,包括表示在逻辑树中的用户接口单元的逻辑单元类。24.如权利要求23所述的系统,其特征在于,所述客户自动类包括用于添加自动事件句柄的工具以及用于撤消自动事件句柄的工具。25.如权利要求23所述的系统,其特征在于,所述客户自动类包括用于添加自动属性改变事件句柄的工具以及用于撤消自动属性改变事件句柄的工具。26.如权利要求23所述的系统,其特征在于,所述客户自动类包括用于添加聚焦改变事件句柄的工具以及用于撤消聚焦改变事件句柄的工具。27.如权利要求23所述的系统,其特征在于,所述客户自动类包括用于添加顶层窗口事件句柄的工具以及用于撤消顶层窗口事件句柄的工具。28.如权利要求23所述的系统,其特征在于,所述客户自动类包括用于添加逻辑结构变化事件句柄的工具以及用于撤消逻辑结构变化事件句柄的工具。29.如权利要求23所述的系统,其特征在于,所述客户自动类包括用于查找逻辑单元的工具以及用于查找原始单元的工具。30.如权利要求23所述的系统,其特征在于,所述客户侧原始单元类用于表示原始单元树中的单元。31.如权利要求23所述的系统,其特征在于,所述逻辑单元类进一步包括获得单元所支持的所有模式的工具。32.如权利要求23所述的系统,其特征在于,进一步包括输入类,用于提供模拟输入的方法。33.如权利要求32所述的系统,其特征在于,所述输入包括鼠标输入和键盘输入。34.一种在为客户提供用户接口信息的存取系统中执行的提供者侧工具系统,该存取系统包括一种从提供者侧向客户传送用户接口信息的机制,以及有选择地揭示用户接口信息的逻辑树,所述提供者侧工具包括提供者侧自动类,包括为客户提供事件通知的工具;提供者侧自动接口,用于揭示用户接口属性;原始单元接口,用于返回与特定相关单元有关的信息;以及原始单元上下文接口,用于管理与特定单元无关的事件和功能。35.如权利要求34所述的系统,其特征在于,提供者侧自动类包括产生自动事件的工具。36.如权利要求34所述的系统,其特征在于,提供者侧自动类包括产生属性改变事件的工具。37.如权利要求34所述的系统,其特征在于,提供者侧自动类包括产生聚焦改变事件的工具。38.如权利要求34所述的系统,其特征在于,提供者侧自动类包括产生逻辑结构改变事件的工具。39.如权利要求34所述的系统,其特征在于,进一步包括控制模式提供者接口。40.如权利要求39所述的系统,其特征在于,所述控制模式提供者接口包括应用程序窗口提供者接口,用于揭示与顶层应用程序窗口相关的状态和信息。41.如权利要求39所述的系统,其特征在于,所述控制模式提供者接口包括展开和收缩接口,用于隐藏和显示内容。42.如权利要求39所述的系统,其特征在于,所述控制模式提供者接口包括网格提供者接口,用于揭示基本网格功能。43.如权利要求39所述的系统,其特征在于,所述控制模式提供者接口包括层次项提供者接口,用于允许客户在用户接口单元之间遍历层次关系。44.如权利要求39所述的系统,其特征在于,所述控制模式提供者接口包括激活提供者接口,供执行单一动作的对象使用。45.如权利要求39所述的系统,其特征在于,所述控制模式提供者接口包括多视图提供者接口,用于揭示对象在多个表示之间进行切换的能力。46.如权利要求39所述的系统,其特征在于,所述控制模式提供者接口包括范围值提供者接口,用于揭示能够管理有限值域的一组属性的能力。47.如权利要求39所述的系统,其特征在于,所述控制模式提供者接口包括滚动提供者接口,用于揭示改变可视区域的能力。48.如权利要求39所述的系统,其特征在于,所述控制模式提供者接口包括由标识选择提供者接口,用于揭示在项之间提供选择的单元。49.如权利要求39所述的系统,其特征在于,所述控制模式提供者接口包括选择提供者接口,用于表示管理选择的容器。50.如权利要求39所述的系统,其特征在于,所述控制模式提供者接口包括窗口提供者接口,用于揭示改变大小和位置的能力。51.一种用于通过存取系统将用户接口信息提供给客户的应用程序接口系统,所述存取系统包括一种从提供者侧向客户侧传送用户接口信息的机制,以及有选择地揭示用户接口信息的逻辑树,所述应用程序接口系统包括客户侧应用程序接口,用于辅助客户获得用户接口信息,其中所述客户侧应用程序接口包括自动类、逻辑单元类、原始单元类、控制模式类以及输入类;以及提供者侧应用程序接口,以响应客户请求,所述提供者侧应用程序接口包括提供者自动类、提供者自动接口、原始单元接口以及控制模式提供者接口。52.如权利要求51所述的系统,其特征在于,进一步包括由提供者侧和客户侧使用的辅助类。53.一种用于通过存取系统将用户接口信息提供给客户的计算机执行的方法,所述存取系统包括一种从提供者侧向客户侧传送用户接口信息的机制,以及有选择地揭示用户接口信息的逻辑树,所述方法包括提供客户侧应用程序接口,用于辅助客户获得用户接口信息,其中所述客户侧应用程序接口包括自动类、逻辑单元类、原始单元类、控制模式类以及输入类;以及提供提供者侧应用程序接口,以响应客户请求,所述提供者侧应用程序接口包括提供者自动类、提供者自动接口、原始单元接口以及控制模式提供者接口。54.如权利要求53所述的方法,其特征在于,进一步包括提供给提供者侧和客户侧使用的辅助类。55.一种用于通过存取系统将用户接口信息提供给客户的计算机执行的方法,所述存取系统包括一种从提供者侧向客户侧传送用户接口信息的机制,以及有选择地揭示用户接口信息的逻辑树,所述方法包括使用从客户自动类中所选择的事件句柄来请求用户接口信息;使用对应的激活事件方法来激活提供者自动类以提供用户接口事件通知。56.如权利要求55所述的方法,其特征在于,进一步包括使用逻辑单元工具来获得用户接口单元信息。57.如权利要求55所述的方法,其特征在于,进一步包括使用客户侧原始单元工具来获得有关原始单元树中单元的原始单元信息。58.如权利要求55所述的方法,其特征在于,进一步包括使用客户侧输入类以提供模拟输入的方法。59.如权利要求58所述的方法,其特征在于,进一步包括模拟鼠标输入和键盘输入。60.如权利要求55所述的方法,其特征在于,进一步包括使用客户侧控制模式类以允许客户与存取系统控制模式进行互动。61.如权利要求55所述的方法,其特征在于,进一步包括执行辅助工具以执行附加功能。62.如权利要求55所述的方法,其特征在于,进一步包括使用提供者侧自动接口以揭示附加属性。63.如权利要求55所述的方法,其特征在于,包括执行提供者原始单元接口,以从原始单元树返回相关单元。64.如权利要求55所述的方法,其特征在于,进一步包括执行控制模式提供者接口,以揭示与定义的控制模式相关的状态和信息。全文摘要描述了一种为客户提供用户接口信息的方法和系统。该方法和系统执行一组应用程序接口,以通过存取系统将用户接口信息提供给客户。存取系统包括一种从提供者侧向客户侧传送用户接口信息的机制,以及有选择地揭示用户接口信息的逻辑树,所述应用程序接口系统包括客户侧应用程序接口,用于辅助客户获得用户接口信息。所述客户侧应用程序接口包括自动类、逻辑单元类、原始单元类、控制模式类以及输入类。提供者侧应用程序接口包括提供者自动类、提供者自动接口、原始单元接口以及控制模式提供者接口。文档编号G06F9/40GK1688970SQ03801951公开日2005年10月26日申请日期2003年5月17日优先权日2003年5月16日发明者B·麦克科恩,R·辛克莱,P·M·瓦格纳,P·J·里德,M·A·弗里德曼,H·S·博恩斯申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1