具体实施方式
示例性操作环境
图1示出了适合在其中实现本发明的计算***环境100的一个示例。计算***环境100仅为合适的计算环境的一个示例,并非对本发明的使用范围或功能提出任何局限。也不应将计算环境100解释为对示例性操作环境100中示出的任一组件或其组合具有任何依赖或需求。
本发明可以使用众多其它通用或专用计算***环境或配置来操作。适用于本发明的众所周知的计算***、环境和/或配置包括但不限于:个人计算机、服务器计算机、手持式或膝上设备、图形输入板设备、无外设服务器、多处理器***、基于微处理器的***、机顶盒、可编程消费者电子设备、网络PC、小型机、大型机、包括任一上述***或设备的分布式计算环境等等。
本发明可以在诸如由计算机执行的程序模块等计算机可执行指令的一般上下文环境中描述。一般而言,程序模块包括例程、程序、对象、组件、数据结构等等,它们执行特定的任务或实现特定的抽象数据类型。本发明也可以在分布式计算环境中实践,其中,任务由通过通信网络连接的远程处理设备来执行。在分布式计算环境中,程序模块可以位于包括存储器存储设备的本地和远程计算机存储介质中。
参考图1,用于实现本发明的示例***包括计算机110形式的通用计算设备。计算机110的组件可包括,但不限于,处理单元120、***存储器130以及将包括***存储器的各类***组件耦合至处理单元120的***总线121。***总线121可以是若干种总线结构类型的任一种,包括存储器总线或存储器控制器、***总线以及使用各类总线体系结构的局部总线。作为示例而非局限,这类体系结构包括工业标准体系结构(ISA)总线、微通道体系结构(MCA)总线、增强ISA(EISA)总线、视频电子技术标准协会(VESA)局部总线以及***部件互连(PCI)总线,也称为Mezzanine总线。
计算机110通常包括各种计算机可读介质。计算机可读介质可以是可由计算机110访问的任一可用介质,包括易失性和非易失性介质、可移动和不可移动介质。作为示例而非局限,计算机可读介质包括计算机存储介质和通信介质。计算机存储介质包括以用于储存诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任一方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、磁盒、磁带、磁盘存储或其它磁存储设备、或可以用来储存所期望的信息并可由计算机110访问的任一其它介质。通信介质通常具体化为诸如载波或其它传输机制的已调制数据信号中的计算机可读指令、数据结构、程序模块或其它数据,并包括任一信息传送介质。术语“已调制数据信号”指以在信号中对信息进行编码的方式设置或改变其一个或多个特征的信号。作为示例而非局限,通信介质包括有线介质,如有线网络或直接连线连接,以及无线介质,如声学、RF、红外和其它无线介质。上述任一的组合也应当包括在计算机可读介质的范围之内。
***存储器130包括以易失性和/或非易失性存储器形式的计算机存储介质,如只读存储器(ROM)131和随机存取存储器(RAM)132。基本输入/输出***133(BIOS)包括如在启动时帮助在计算机110内的元件之间传输信息的基本例程,通常储存在ROM 131中。RAM 132通常包含处理单元120立即可访问或者当前正在操作的数据和/或程序模块。作为示例而非局限,图1示出了操作***134、应用程序135、其它程序模块136和程序数据137。
计算机110也可包括其它可移动/不可移动、易失性/非易失性计算机存储介质。仅作示例,图1示出了对不可移动、非易失性磁介质进行读写的硬盘驱动器141、对可移动、非易失性磁盘152进行读写的磁盘驱动器151以及对可移动、非易失性光盘156,如CD ROM或其它光介质进行读写的光盘驱动器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给予不同的标号来说明至少它们是不同的副本。用户可以通过输入设备,如图形输入板或电子数字化仪164、话筒163、键盘162和定位设备161(通常指鼠标、跟踪球或触摸板)向计算机110输入命令和信息。其它输入设备(图1中未示出)可包括操纵杆、游戏垫、圆盘式卫星天线、扫描仪,或其他设备,包括包含生物测量传感器、环境传感器、位置传感器,或其他类型的传感器的设备。这些和其它输入设备通常通过耦合至***总线的用户输入接口160连接至处理单元120,但是也可以通过其它接口和总线结构连接,如并行端口、游戏端口或通用串行总线(USB)。监视器191或其它类型的显示设备也通过接口,如视频接口190连接至***总线121。监视器191也可与通过触摸屏接口192连接到***总线121的触摸屏面板等集成。注意,监视器和/或触摸屏面板可以在物理上耦合至其中容纳计算设备110的外壳,诸如在图形输入板类型的个人计算机中。另外,诸如计算设备110等计算机也可包括其它***输出设备,如扬声器194和打印机195,它们通过输出***接口193等连接。
计算机110可以使用到一个或多个远程计算机,如远程计算机180的逻辑连接在网络化环境中操作。远程计算机180可以是个人计算机、服务器、路由器、网络PC、对等设备或其它常见的网络节点,并通常包括许多或所有相对于计算机110所描述的元件,尽管在图1中仅示出了存储器存储设备181。图1描述的逻辑连接包括局域网(LAN)171和广域网(WAN)173,但也可包括其它网络。这类网络环境常见于办公室、企业范围计算机网络、内联网以及因特网。当在LAN网络环境中使用时,计算机110通过网络接口或适配器170连接至LAN 171。当在WAN网络环境中使用时,计算机110通常包括调制解调器172或用于通过WAN 173,如因特网建立通信的其它装置。调制解调器172可以是内置或外置的,通过用户输入接口160或其它适当的机制连接至***总线121。在网络化环境中,相对于计算机110所描述的程序模块或其部分可储存在远程存储器存储设备中。作为示例,而非局限,图1示出远程应用程序185驻留在存储器设备181中。可以理解,示出的网络连接是示例性的,也可以使用在计算机之间建立通信链路的其它装置。
知晓上下文的平台
本发明一般针对一种用于知晓上下文的平台的***和方法。知晓上下文的平台可有利地允许计算机***累积和公开关于执行环境的上下文信息,诸如物理位置、用户在该物理位置处可与其交互的人、以及用户的活动等,使得上下文信息可用于使计算机智能地适应执行环境。如此处所使用的执行环境指的是可执行文件设置,诸如安装或配置设置、可执行指令、以及操作***服务。如所见到的,本发明的体系结构提供了具有用于设置、跟踪和获取关于计算机***的执行环境的上下文信息的组件和框架。所提供的组件中可以有上下文引擎以及统一的数据存储,用于在平台级累积上下文信息,以供运行在该平台上的可执行文件访问。可储存任何类型的上下文信息,包括用户上下文数据、可执行文件上下文数据以及***上下文数据。如可以理解的,此处所描述的各种框图、流程图和情形仅是示例,且可以有许多可向其应用本发明的其它情形。
转向附图的图2,示出了概括地表示用于知晓上下文的平台的***组件的示例性体系结构。本领域的技术人员可以理解,在该图中示出的框内实现的功能可以被实现为单独的组件,或者若干或全部框的功能可以在单个组件内实现。作为一个示例,上下文平台204中的上下文API 206的功能可以在单独的组件中实现。
图2所示的上下文平台204可以在操作上耦合至各种可执行文件202以及诸如数据存储210等存储工具。上下文平台204可包括上下文应用程序编程接口(API)206以及上下文引擎208。上下文API 206可以是应用程序编程接口(API)、对象、控件或其它可执行代码。上下文API 206例如可通过包括可调用接口,诸如向数据存储210添加上下文信息的SetContextData(设置上下文数据)、通知对数据存储210中的上下文信息的更新的TrackContextData(跟踪上下文数据)、以及检索数据存储210中的上下文信息的GetContextData(获得上下文数据),来提供访问以设置、跟踪或获得上下文信息。也可使用其它上下文API来操纵上下文信息。
上下文引擎208可以是任何可执行软件代码,包括内核组件、应用程序组件、链接库组件、对象等等。上下文引擎208可以从可执行软件代码接收执行诸如设置、跟踪和获得数据存储210中的上下文信息等上下文信息操作的请求。例如,上下文引擎208可跟踪要被通知上下文信息的更新或改变的请求,并可在接收到请求被跟踪的上下文信息的更新或改变时通知可执行文件。为持久地储存上下文信息,上下文引擎208可在操作上耦合至诸如数据存储210等各种存储工具。上下文引擎208可将诸如GUID等唯一标识符与可用于储存上下文信息的表示上下文信息的上下文数据块相关联。
数据存储210可通过在平台级累积上下文信息,以供运行在该平台上的可执行文件访问,来对上下文平台204提供上下文信息的统一存储。数据存储可储存上下文类型。上下文类型可以是担当由位的数据块表示的上下文信息的标识符的GUID。如此处所使用的上下文信息包括,但不限于,关于逻辑和物理执行环境的任何信息,包括位置、活动和状态信息。实际上,上下文信息可以是任何大小、格式或数据类型。例如,上下文信息可包括二进制数据、格式化的数据、诸如音频或视频等媒体数据、人类可读数据、XML、加密数据等等。储存在数据存储210中的各种上下文信息可以有用户上下文数据212、可执行文件上下文数据214以及***上下文数据216。用户上下文数据212可包括关于诸如网上冲浪、使用演示程序等用户活动的信息。可执行文件上下文数据214可包括关于诸如程序设置、打开的文件等可执行文件状态的信息。***上下文数据216可包括关于诸如类似电池能量水平、网络连通性等硬件设备状态的***状态的信息。
可执行文件可以是可以提供或获得上下文信息和/或依照上下文信息的改变来适应其计算环境的任何应用程序、内核组件或其它可执行文件。可执行文件202可以在操作上耦合至上下文API 206,以访问可调用接口来设置、跟踪或获得上下文信息。例如,用于MicrosoftWindows XP操作***的网络位置知晓(NLA)服务可监视网络改变,并可通过调用SetContextData API将网络的上下文信息设为新网络连接,来向上下文平台提供网络信息。上下文引擎可接收该新值,以与网络连接相关联,并可查找调用了TrackContext API以被通知网络连接的上下文信息的改变的可执行文件。上下文引擎然后可向这些可执行文件发送关于网络连接的上下文信息的改变的通知。作为接收网络连接的改变的通知的结果,一个或多个可执行文件可改变诸如默认打印机设置、默认互联网浏览器主页、互联网浏览器代理服务器设置等***设置。以此方式,可执行文件可在被通知到上下文信息的更新之后使用该上下文信息来适应其执行环境。
图3呈现了概括地表示一个替换实施例中用于知晓上下文的平台的***组件的示例性体系结构的框图。除结合图2所讨论的***组件之外,受管上下文应用程序编程接口304可在操作上耦合至上下文API 206,以使用受管代码来提供上下文平台302的实现。受管代码指的是为Microsoft.NET平台开发的,且包含可由Microsoft公共语言运行库(CLR)使用的元数据的软件代码。有利的是,.NET运行库可以管理数据相关任务,诸如分配存储器、回收存储器、类型检查和其它数据相关任务。受管上下文API 304可包括ContextClient(上下文客户端)对象,它具有两个静态方法,即SetContext(设置上下文)以及GetContext(获取上下文),以及允许可执行文件使用.NET的互操作性程序集而非直接与窗口消息交互来接收上下文信息事件的一组非静态方法。受管上下文API 304可以在操作上耦合至上下文API 206,并利用.NET互操作性程序集使用上述上下文API 206来与上下文引擎208通信。
SetContext方法可以由可执行文件用于提供关于一种类型的上下文的新上下文信息。该上下文类型可以由传递给该方法的对象的类型来确定。上下文引擎可通过将上下文信息与对应于传递给该方法的对象的GUID相关联来储存上下文信息。可执行文件可使用GetContext方法来获得用于特定类型的上下文的当前上下文信息。上下文引擎可使用用于该上下文类型的GUID来查找储存的上下文信息,该上下文信息可通过对SetContext方法的先前调用被写入数据存储中。
受管上下文API 304也可包括可由称为ContextClient的对象访问的事件机制。ContextClient可公开名为ContextChanged(上下文改变)的事件,以及名为ContextChangedEventHandler(上下文改变事件处理程序)的事件处理程序,该事件处理程序可利用具有诸如OldContext(旧上下文)、NewContext(新上下文)、ContextType(上下文类型)以及Stale(陈旧)等属性的ContextChangedEventArgs(上下文改变事件参数)对象。OldContext和NewContext属性可允许事件接收器在上下文改变之前和之后确定上下文的状态,使得接收器可采取适当的动作。ContextType可表示该事件中的对象的类型。最后,Stale标志可用于指示提供该上下文信息的可执行文件是否仍能够驻留在易失性存储器中。
图4呈现了概括地表示用于可包括在本上下文平台的各实施例中的上下文引擎的***组件的示例性体系结构的框图。上下文引擎208可从消息队列接收执行上下文信息操作的请求,可用上下文信息的更新来更新数据存储210,并且然后可向可执行文件202通知改变。上下文引擎208可包括消息队列402、上下文消息处理器404、上下文数据406、上下文通知队列414、上下文通知器416、通知表418以及一个或多个通知器线程420。在一个实施例中,只要在消息队列402中接收到由可执行文件发送的对上下文信息操作的请求,操作***就可调度上下文消息处理器404处理该消息。可由上下文引擎208接收的消息可包括向上下文数据406添加上下文信息的SetContextData(设置上下文数据)请求、被通知到对上下文数据406中的上下文信息的更新的TrackContextData(跟踪上下文数据)请求、以及从上下文数据406检索上下文信息的GetContextData(获得上下文数据)请求。
上下文消息处理器404可将上下文信息储存在存储器中,如由上下文信息406所示的。储存在上下文数据406中的各种上下文信息可以有用户上下文数据408、可执行文件上下文数据410以及***上下文数据412。上下文引擎208可储存上下文信息,作为具有包含上下文信息的相关联数据块的GUID。只要接收到GetContextData请求,上下文消息处理器404就可从上下文数据406中获得所请求的上下文信息,并可将上下文信息的副本放置在共享存储器缓冲区中,或存储器映射的文件或诸如盘上文件或***注册表等其它共享位置中,使得可执行文件可在接收通知时读出它。只要接收到SetContextData请求,上下文消息处理器404可通过将SetContextData请求中的上下文信息添加到上下文数据406来更新上下文数据406,然后上下文消息处理器404可将上下文信息放置在上下文通知队列414中。在一个实施例中,上下文信息可以是更新对象,它可包括旧上下文信息、新上下文信息以及请求被通知到该上下文信息中的更新的可执行文件的列表。在另一实施例中,请求被通知到上下文信息中的更新的可执行文件可以单独地储存在通知表418中,其中可执行文件的列表可以与一个或多个上下文类型或GUID相关联。在将上下文信息放置在上下文通知队列414中以后,可唤醒上下文通知器416。在一个实施例中,上下文通知器416可以是由上下文引擎208产生的线程。上下文通知器416可从上下文通知队列414中读取上下文信息的更新,并向请求被通知到该上下文信息中的更新的每一可执行文件发送通知消息。
在一个实施例中,上下文通知器416可以产生一个或多个通知器线程420,以异步地发送具有上下文信息的通知消息,来向各个可执行文件通知上下文信息的更新。由此,通知器线程上的任何可执行文件的同步阻断可能不能阻止发送其它通知,且可向可执行文件发送任意数量的通知,而无需完成先前发送给任一可执行文件的通知。在接收到关于上下文信息的更新的通知之后,可执行文件可从诸如共享存储器缓冲区或存储器映射的文件等共享位置访问上下文信息的更新。
上下文引擎208可周期性地将上下文数据406中的上下文信息写入诸如数据存储210等持久存储中。上下文引擎208也可将通知表418写入持久存储中。在一个实施例中,上下文引擎208可在一段时间的不活动之后进入睡眠。在进入睡眠之前,上下文引擎208可将上下文数据406和通知表418写入持久存储中。默认的不活动时间段可以是例如一小时。在各实施例中,可使用适用于用户活动的期望持续时间的其它时间段。在某些实施例中,持续时间可由用户设置。当唤醒上下文引擎时,它可从持久存储中读取上下文数据,并将其写入上下文数据406中,以及从持久存储中读取通知列表,并将其写入通知表418中。
只要可执行文件希望提供上下文信息以供其它可执行文件使用,该可执行文件就可向上下文引擎发送一设置请求。图5呈现了概括地示出在一个实施例中由可执行文件采取的用于设置上下文信息的示例性步骤的流程图。在步骤502,首先检测上下文的改变。然后,在步骤504,可发送设置上下文信息的请求。例如,诸如用于MicrosoftWindows XP操作***的网络位置知晓(NLA)服务等可执行文件可监视网络改变,并可检测新网络连接。可执行文件然后可通过调用SetContextDataAPI以将网络的上下文信息设为新网络连接,来向上下文平台提供该网络信息。
图6呈现了概括地表示在一个实施例中由可执行文件采取的用于跟踪上下文信息的示例性步骤的流程图。首先,在步骤602,可发送跟踪上下文信息的请求。例如,可负责计算机***的默认打印机设置的可执行文件可调用TraceContextDataAPI来向上下文平台发送要被通知到关于网络连接的上下文信息的更新的跟踪请求。接着,在步骤604,可接收上下文信息的更新的通知。然后在步骤606,可获得上下文信息的更新。例如,前一示例中可负责默认打印机设置的可执行文件可接收关于新网络连接的上下文信息的更新的通知,并从共享存储器缓冲区或存储器映射的文件中检索关于新网络连接的上下文信息的更新的副本。最后,在步骤608,可执行文件可依照上下文信息的更新进行适应。由此,如前一示例中可负责默认打印机设置的可执行文件等可执行文件可依照上下文信息的更新,诸如通过将默认打印机设置改为用于新网络连接的打印机设置,来适应其执行环境。
图7呈现了概括地表示在一个实施例中由可执行文件采取的用于获得上下文信息的示例性步骤的流程图。首先,在步骤702,可发送获得上下文信息的请求。例如,可负责设置浏览器的默认主页的可执行文件可调用GetContextData API来获得网络的上下文信息。接着,在步骤704,可接收上下文信息的通知。最后,在步骤706,可执行文件可依照所获得的上下文信息进行适应。例如,前一示例中可负责设置浏览器的默认主页的可执行文件可将默认主页设置改为用于网络连接的主页设置。
图8呈现了概括地表示在一个实施例中由上下文引擎采取的用于执行所请求的上下文信息操作的示例性步骤的流程图。本领域的技术人员可以理解,实现可选择以不同的顺序执行这些步骤,或者可选择为效率或灵活性起见仅执行这些步骤中的某一些,而同时达到同样的效果且不会偏离本发明的范围。在步骤802,可接收上下文信息操作。例如,上下文引擎208可从可执行文件接收上下文信息操作。在步骤804,可确定所接收到的上下文信息操作是否是设置上下文信息的请求。如果是,则可在步骤806向储存在存储器中的上下文数据的表示添加上下文信息,并可在步骤808将该上下文信息放置在上下文通知队列中。在一个实施例中,上下文引擎208可将设置请求中的上下文信息添加到上下文数据406,然后上下文引擎208可将该上下文信息放置在上下文通知队列414中。
在步骤810,可以在要被通知该上下文信息的更新的可执行文件列表中查找请求被通知到该上下文信息的更新的任何可执行文件。例如,在一个实施例中,请求被通知到该上下文信息的更新的可执行文件的列表可单独储存在诸如通知表418等通知表中,其中可执行文件的列表可与上下文类型或GUID相关联。在另一实施例中,请求被通知到该上下文信息的更新的可执行文件的列表可储存在包括更新的上下文信息以及其它信息的更新对象中。
在步骤811,可以确定是否存在请求处于要被通知到该上下文信息的更新的可执行文件列表中的任何可执行文件。如果是,则可在步骤812向请求被通知到该上下文信息的更新的可执行文件的列表发送通知。在一个实施例中,上下文通知器416可从上下文通知队列414中读取上下文信息的更新,并向请求被通知到该上下文信息的更新的每一可执行文件发送通知消息。在各实施例中,上下文通知器416可产生一个或多个通知器线程420,以异步地发送具有上下文信息的通知消息,来向各个可执行文件通知上下文信息的更新。
在步骤812向请求被通知到该上下文信息的更新的可执行文件的列表发送通知之后,或者如果在步骤811确定不存在请求处于要被通知到该上下文信息的更新的可执行文件列表中的任何可执行文件,则可在步骤814持久储存上下文信息的更新。例如,上下文引擎208可周期性地将上下文数据406中的更新的上下文信息写入诸如数据存储210等持久存储中。在一段时间的不活动之后,在一个实施例中,上下文引擎208可在进入睡眠之前将上下文数据406写入持久存储中。在持久储存了更新的上下文信息之后,处理完成。
返回到步骤814,如果接收到的上下文信息操作不是设置请求,则可以在步骤816确定接收到的上下文信息操作是否为跟踪上下文信息的请求。如果是,则可在步骤818更新要被通知到该上下文信息的更新的可执行文件的列表。接着,在步骤820,可持久存储要被通知到该上下文信息的更新的可执行文件的更新的列表。例如,上下文引擎208可周期性地将通知表418中的更新的可执行文件列表写入持久存储中。在另一实施例中,上下文引擎208可周期性地将包括更新的上下文信息以及其它信息的更新对象中的更新的可执行文件列表写入持久存储中。在一段时间的不活动之后,在各实施例中,上下文引擎208可在进入睡眠之前将更新的可执行文件列表写入持久存储中。在持久存储了要被通知的可执行文件的更新的列表之后,处理完成。
返回到步骤816,如果所接收到的上下文信息操作不是跟踪请求,则可在步骤822确定所接收到的上下文信息操作是否为获得上下文信息的请求。如果是,则可在步骤824检索上下文信息。例如,在一个实施例中,上下文引擎208可从上下文数据406中获得上下文信息。在另一实施例中,上下文引擎208可从数据存储210中获得上下文信息。接着,可在步骤826向请求者发送上下文信息。在向发送获取请求的可执行文件发送了上下文信息之后,处理完成。在一个实施例中,只要任何可执行文件可响应于发送获取请求而接收上下文信息,就可向请求被通知到该上下文中的更新的可执行文件的列表发送通知。
有利的是,该***和方法可允许计算机***累积和公开关于执行环境的上下文信息,使得该上下文信息可用于使计算机智能地适应执行环境。可执行文件可通过使用上下文信息的单个项来适应执行环境,或者可通过使用上下文信息的多个项来适应执行环境。此外,可执行文件可独立于其它可执行文件或可结合若干可执行文件来操作,以设置上下文信息或使用可用的上下文信息来适应执行环境。上下文信息可以在统一的数据存储中在平台级累积,使得运行在该平台上的任何可执行文件可提供或使用该上下文信息来使计算机***智能地适应以增强用户的生产率。
如可以从以上详细描述中见到的,本发明提供了一种用于可用于适应执行环境的知晓上下文的平台的改进的***和方法。本发明的体系结构提供了具有用于设置、跟踪和获得上下文信息的接口的框架。所提供的***和框架是可扩展的。可使用任何类型的上下文信息,包括用户上下文数据、可执行文件上下文数据、以及***上下文数据。可支持可提供或使用上下文信息的任意数量的可执行文件。如现在所理解的,该***和方法因此提供了当代计算中所需的显著优点和益处。
尽管本发明允许各种修改和替换构造,在附图中示出并在上文详细描述了其某些示出的实施例。然而,应当理解,并没有任何意图将本发明限于所揭示的具体形式,而是相反,本发明旨在覆盖落入本发明的精神和范围之内的所有修改、替换构造和等效技术方案。