应用程序中嵌入微件工具栏的方法和快速访问微件的方法

文档序号:6596791阅读:278来源:国知局
专利名称:应用程序中嵌入微件工具栏的方法和快速访问微件的方法
技术领域
本发明涉及计算机技术领域,尤其涉及一种在应用程序中嵌入微件(widget)工 具栏和快速访问widget的方法。
背景技术
近年,一种被称为widget的本地化Web小应用程序在用户桌面环境中日益流行, 其界面简洁、体积较小、响应较快、容易部署,不仅能在浏览器窗口中运行,还能脱离浏览器 在用户桌面上运行。widget的脚本预先保存在本地,由一种被称为widget引擎的特殊的浏 览器进行加载、解释和渲染,同时widget引擎还为widget提供访问本地资源和网络资源的 能力。图1示出现有技术中widget应用架构的结构示意图。如图1所示,符合万维网联 盟(W3C,World Wide Web Consortium)规范的 widget 应用以 HTML+Javakript 脚本实现。 典型的widget应用由一个HTML主文件和该HTML主文件所引用的CSS样式文件、JS脚本 文件和图标文件构成。widget应用一般有多种显示模式,如停靠模式(Docked)、桌面模式 (Desktop)和全屏模式(Fullkreen);在停靠模式下,widget窗口停靠在侧边栏中;在桌面 模式下,widget窗口悬浮在桌面上;在全屏模式下,widget窗口最大化;widget可以在不同 的显式模式之间切换,widget的显式模式通常采用HTML的DIV视图实现。在不同显示模式 中,widget窗口的大小和显示的信息细节往往也不相同。widget应用由widget引擎承载, widget引擎主要由widget管理器和Web引擎构成,widget管理器负责widget的生命周 期管理,包括widget的安装、加载、卸载,web引擎负责widget的脚本解释和渲染。widget 引擎将widget加载后,先将widget的HTML和脚本解释成文档对象模型(D0M,Document Object Model)树,然后对DOM树进行渲染,得到widget窗口,widget窗口属于逻辑窗口, 没有窗口句柄,无法接收windows窗口消息。而且widget应用属于高度可定制化的应用, widget的增加或删除非常频繁,现有COM插件对插件工具栏硬编码的方式无法实现widget 工具栏与widget的增删保持同步。目前许多widget用户在工作中使用得更多的仍然是传统的应用程序,经常会遇 到在使用传统应用程序的过程中使用widget的情形,由于传统应用程序通常工作在最大 化甚至全屏的窗口模式下,如果用户想要使用widget,就必须换到桌面才能访问widget, 使用完widget之后又要切换回应用程序的窗口,频繁的窗口切换给用户的操作带来很大 不便,而且如果安装的widget较多,从大量的widget中快速找到和访问所需的widget也 并不容易。基于COM插件技术访问外部应用窗口的现有技术中,支持COM插件的桌面应用 由应用程序(宿主程序)和各种COM插件组成;COM插件由宿主程序加载,并与宿主程序 运行在相同的应用程序进程中。COM插件与宿主程序通过标准的接口通信,COM插件向宿 主程序提供IDispatch接口,供宿主程序控制COM插件的行为,宿主程序向COM插件提供 Application接口,供COM插件在宿主程序中添加工具栏,获取宿主程序的上下文数据。
图2示出现有技术中通过COM插件技术在宿主程序创建插件工具栏的流程图。如 图2所示,典型的COM应用插件主要由工具栏创建单元,按钮创建单元、按钮响应单元和插 件资源块构成;对于需要调用外部应用窗口的COM应用插件还可以包括外部应用代理。其 中,工具栏创建单元用于在宿主程序中创建插件工具栏;按钮创建单元,用于在工具栏上创 建按钮,为按钮绑定相应的按钮图标资源和按钮响应单元;插件资源块用于保存加载到内 存中的按钮图标资源;插件响应单元负责响应特定按钮点击事件,执行相应的动作;外部 应用代理通过预定方式调用外部应用的窗口。插件工具栏中的每个按钮都要有一套独立的 按钮创建单元、按钮图标资源和按钮响应单元;因此,现有技术中插件工具栏必须在COM插 件开发时就完全定制好,包括插件工具栏上有哪些按钮、按钮的图标、按钮的摆放次序以及 按钮的响应动作等等,都要在COM插件的代码中预先指定,编译到COM插件的文件中,再由 宿主程序一次性加载到内存中。如图2所示,现有技术中通过COM插件技术在宿主程序创建插件工具栏的流程主 要涉及步骤1. 1-1. 6,通过插件按钮触发外部应用的流程主要涉及步骤2. 1-2. 3。其中,通 过COM插件技术在宿主程序创建插件工具栏的流程包括步骤1. 1,宿主程序加载COM插 件,调用 COM 插件 IDispatch 接口的 OnConnection 函数;步骤 1. 2,OnConnection 函数调 用工具栏创建单元创建插件工具栏对象;步骤1. 3,工具栏创建单元依次调用每个按钮的 按钮创建单元在工具栏上创建按钮;步骤1. 4,按钮创建单元为按钮绑定按钮图标资源;步 骤1. 5,按钮创建单元为按钮绑定按钮响应单元(回调函数);步骤1. 6,工具栏创建单元 调用宿主程序的Application接口将创建好的工具栏对象添加到宿主程序的工具栏容器 中。通过插件按钮触发外部应用的流程包括步骤2. 1,用户点击宿主程序中插件工具栏 的插件按钮,触发相应的按钮响应单元;步骤2. 2,按钮响应单元调用外部应用代理触发外 部应用;步骤2. 3,外部应用代理通过windows消息机制调用外部应用的窗口,这里的外部 应用是指与宿主应用运行在不同进程中的应用。目前在windows系统中,调用外部应用窗 口的方法为windows的消息机制,主要包括1)获取外部应用窗口句柄;2)构造窗口消息 (需携带数据的自定义消息类型通常为WM_C0PYDATA)并将窗口消息提交给操作系统的消 息子系统;3)消息子系统通过窗口句柄找到对应的窗口,调用该窗口的窗口处理函数。使 用windows消息机制向窗口发送消息的前提是能够获取到窗口句柄,由于widget窗口是 widget引擎在桌面上描绘的逻辑窗口,没有窗口句柄,因此采用widows消息机制无法直接 向widget窗口发送消息。另外,widget是由JS(JavaScript)脚本实现的,当前现有技术 还无法做到跨进程调用JS脚本。

发明内容
本发明要解决的一个技术问题是提供一种在应用程序中嵌入widget工具栏的方 法,能够在普通的应用程序中方便地嵌入widget工具栏,以便实现用户对widget的便捷访 问。本发明的一个方面提供了一种在应用程序中嵌入widget工具栏的方法,该方法 包括应用程序加载widget插件,调用widget插件的接口函数;接口函数调用工具栏创建 单元,创建widget插件的工具栏对象;工具栏创建单元读取widget插件对应的工具栏配置 文件,获取widget按钮的配置信息,并创建对应的按钮对象;widget插件根据widget按钮
5的配置信息加载widget按钮的图标资源文件,将图标资源文件与widget按钮绑定;根据 widget按钮的配置信息创建widget访问信息对象,并将widget访问信息对象与widget按 钮的映射关系写入映射表中;以及将创建好的widget插件的工具栏对象添加到应用程序 的工具栏容器中。本发明提供的在应用程序中嵌入widget工具栏的方法的一个实施例中,将 widget访问信息对象与widget按钮的映射关系写入映射表中进一步包括将widget访 问信息对象与widget按钮的映射关系写入按钮-widget信息映射哈希表中;其中widget 按钮的ID作为按钮-widget信息映射哈希表的key关键字,widget访问信息对象作为按 钮-widget信息映射哈希表的value数值。本发明提供的在应用程序中嵌入widget工具栏的方法的一个实施例中,该方法 还包括根据widget按钮的配置信息创建widget访问信息对象,并将widget访问信息对 象与widget按钮的映射关系写入映射表中后,统一按钮创建单元为widget按钮绑定统一 按钮响应单元。本发明提供的在应用程序中嵌入widget工具栏的方法的一个实施例中,widget 插件的工具栏配置文件包括面向单个应用的应用专属widget工具栏配置文件和供多个应 用共享的缺省widget工具栏配置文件;其中widget工具栏配置文件的配置信息包括要 放置的widget按钮名称、所关联的widget标识、所关联的widget的显示模式、所关联的 widget的输入参数类型列表、widget按钮的图标文件名称和widget按钮的显示次序中的 至少一个;widget访问信息对象为widget访问信息类的对象实例,widget访问信息类的属 性包括widget标识、widget窗口标识、widget窗口入口函数名称、入口函数参数模板和上 下文属性列表中的至少一个。本发明提供的在应用程序中嵌入widget工具栏的方法的一个实施例中,工具栏 创建单元读取widget工具栏配置文件时,优先读取与应用程序关联的widget工具栏配置 文件;如果不存在与应用程序关联的widget工具栏配置文件,则读取缺省的widget工具栏 配置文件。本发明的另一个方面提供了一种快速访问widget的方法,该方法包括在应用程 序中嵌入widget工具栏;接收widget工具栏上的目标widget的按钮触发的按钮响应消 息;获取widget访问信息对象,并将widget访问信息对象发送给widget引擎代理;widget 引擎代理根据widget访问信息对象获取上下文数据,根据widget访问信息对象和上下文 数据生成widget请求;并将widget请求发送给widget引擎;以及widget引擎根据widget 请求查找目标widget,检查目标widget状态,并将widget显示在屏幕的最顶层。本发明提供的快速访问widget的方法的一个实施例中,widget引擎代理根据 widget访问信息对象获取上下文数据进一步包括midget引擎代理从widget访问信息对 象中获取上下文属性列表,根据上下文属性从应用程序的接口中获取上下文数据;以及将 上下文数据转换为相应的字符串。本发明提供的快速访问widget的方法的一个实施例中,接收到目标widget的还 原按钮的触发响应消息,widget引擎将widget恢复为之前的显示状态。本发明提供的快速访问widget的方法的一个实施例中,上下文数据包括应用程 序的名称、当前文档名称、当前文档页码、当前选择的文本数据、当前应用窗口位置或当前鼠标位置中的至少一个。本发明提供的快速访问widget的方法的一个实施例中,widget引擎检查目标 widget状态进一步包括如果目标widget未安装,则widget引擎向widget引擎代理返回 错误提示;如果目标widget未触发,则widget引擎触发目标widget ;如果目标widget已 触发,则保存目标widget的显示状态信息,其中显示状态信息包括目标widget的显示模 式、widget窗口的大小和位置。本发明提供一种在应用程序中嵌入widget工具栏和快速访问widget的方法,能 够在普通的应用程序中方便、快速的访问widget,无需在应用窗口和widget窗口之间频繁 切换,并且能够保持widget原有的布局不变。


图1示出现有技术中widget应用架构的结构示意图;图2示出现有技术中通过COM插件技术在宿主程序创建插件工具栏的流程图;图3示出本发明的在应用程序中嵌入widget工具栏的方法的一个实施例的流程 图;图4示出本发明的快速访问widget的方法的一个实施例的流程图;图5示出本发明中通过COM插件技术在宿主程序创建插件工具栏和从宿主程序中 访问widget的方法的一个具体实施例的流程图。
具体实施例方式下面参照附图对本发明进行更全面的描述,其中说明本发明的示例性实施例。图3示出本发明的在应用程序中嵌widget工具栏的方法的一个实施例的流程图。如图3所示,在应用程序中嵌widget工具栏的方法流程300包括步骤302,应用 程序加载widget插件,调用widget插件的接口函数。例如,应用程序(宿主程序)加载 widget插件,调用该widget插件的接口函数,如IDispatch接口的OnConnection函数。稍 后对本发明中widget使用的COM插件技术作进一步地详细介绍。步骤304,接口函数调用工具栏创建单元,创建widget插件的工具栏对象。例如, 应用程序调用widget插件的接口 OnCormection函数后,由该OnCormection函数调用工具 栏创建单元创建插件工具栏对象。步骤306,工具栏创建单元读取widget插件对应的工具栏配置文件,获取widget 按钮的配置信息,并创建对应的按钮对象。例如,工具栏创建单元从工具栏配置目录中读 取与该应用对应的工具栏配置文件(可以包括面向单个应用的应用专属widget工具栏配 置文件和供多个应用共享的缺省widget工具栏配置文件),该工具栏配置文件名就是应用 ID,得到每个widget按钮的配置信息,并根据该按钮的配置信息创建该按钮对象。其中, widget工具栏配置文件的配置信息包括要放置的widget按钮名称、所关联的widget标识、 所关联的widget的显示模式、所关联的widget的输入参数类型列表、widget按钮的图标 文件名称和widget按钮的显示次序中的至少一个。步骤308,widget插件根据widget按钮的配置信息加载widget按钮的图标资源 文件,将图标资源文件与widget按钮绑定。例如,widget插件(如其中的统一按钮创建单元)根据该widget按钮配置信息中的图标文件名称从图标资源目录中加载图标资源文件, 并将图标资源文件与该widget按钮对象进行绑定。步骤310,根据widget按钮的配置信息创建widget访问信息对象,并将widget 访问信息对象与widget按钮的映射关系写入映射表中。例如,widget插件(如其统一按 钮创建单元)根据按钮配置信息创建widget访问信息对象,并将widget访问信息对象 与widget按钮的该映射关系写入到映射表中(如映射哈希表)。widget访问信息对象为 widget访问信息类(WidgetAccessInfo)的对象实例,访问信息类的属性包括widget标 识、widget窗口标识、widget窗口入口函数名称、入口函数参数模板和上下文属性列表中 的至少一个。步骤312,将创建好的widget插件的工具栏对象添加到应用程序的工具栏容器 中。例如,由widget插件(如其工具栏创建单元)调用宿主程序的Application接口将创 建好的widget工具栏对象添加到宿主程序的工具栏容器中。本发明提供的在应用程序中嵌入widget工具栏的方法的一个实施例中,将 widget访问信息对象与widget按钮的映射关系写入映射表中进一步包括将widget访 问信息对象与widget按钮的映射关系写入按钮-widget信息映射哈希表中;其中widget 按钮的ID作为按钮-widget信息映射哈希表的key关键字,widget访问信息对象作为按 钮-widget信息映射哈希表的value数值。本发明提供的在应用程序中嵌入widget工具栏的方法的一个实施例中,工具栏 创建单元读取widget工具栏配置文件时,优先读取与应用程序关联的widget工具栏配置 文件;如果不存在与应用程序关联的widget工具栏配置文件,则读取缺省的widget工具栏 配置文件。本发明中采用的COM插件技术基于现有自动化COM插件(实现了 IDispatch接口 的COM插件)向桌面应用嵌入widget工具栏,通过widget工具栏访问由widget引擎所承 载的widget窗口(逻辑窗口)。具体来说,本发明将硬编码在各个COM插件中的按钮图标 资源抽取出来,放在统一的图标目录中,并为每个应用提供一个(或共享的)widget工具栏 配置文件,定义嵌入应用的widget工具栏的每个按钮信息和相关联的widget信息,包括 按钮名称、按钮图标文件名、关联的widget标识、widget窗口 /视图标识、widget输入参 数和按钮显示顺序。嵌入应用的widget应用插件(也是COM插件)包含工具栏创建单元、 统一按钮创建单元、统一按钮响应单元和widget引擎代理,不含按钮图标资源。工具栏创 建单元负责在宿主程序中创建widget工具栏;统一按钮创建单元根据各个widget按钮的 配置信息创建widget按钮;统一按钮响应单元为各个widget按钮提供公共的响应机制; widget引擎代理负责与插件引擎通信。在本发明中,所有widget按钮共用一套按钮创建单 元和一套按钮响应单元,根据按钮的配置信息创建按钮和作出响应。与现有技术相比,本发 明对COM插件内部结构进行了优化,解决了现有COM插件只有重新编译才能修改插件工具 栏的不足,能够基于配置文件及时地修改插件工具栏。同时也解决了现有技术无法跨进程 访问基于脚本的逻辑窗口的问题。本发明提供的在应用程序中嵌入widget工具栏的方法,能够在普通的应用程序 中方便地嵌入widget工具栏,以便实现用户对widget的便捷访问。图4示出本发明的在应用程序中嵌入widget工具栏的方法的一个实施例的流程图。如图4所示,在应用程序中嵌入widget工具栏的方法流程400包括步骤 402-412,其中步骤402-410和412可以分别执行与图3所示的步骤302-312相同或相似的 技术内容,为简洁起见,这里不再赘述其技术内容。如图4所示,在步骤410 “根据widget按钮的配置信息创建widget访问信息对 象,并将widget访问信息对象与widget按钮的映射关系写入映射表中”后,步骤412 “将 创建好的widget插件的工具栏对象添加到应用程序的工具栏容器中”之前,增加步骤411, 统一按钮创建单元为widget按钮绑定统一按钮响应单元。例如,由widget插件的统一按 钮创建单元为widget按钮绑定统一按钮响应单元,每个按钮的响应函数均相同。按钮响应 函数的输入参数包括用户所点击的按钮对象,不同按钮传入的按钮对象实例是不同的,按 钮对象中有按钮ID(按钮的唯一标识),通过按钮ID可以从按钮-widget信息映射表中取 出关联的widget访问信息,交给widget引擎代理做后续处理。图5示出本发明的快速访问widget的方法的一个实施例的流程图。如图5所示,通过应用程序快速访问widget的方法流程500包括步骤502,在应 用程序中嵌入widget工具栏后,用户点击应用程序中的widget工具栏上的目标widget按 钮以触发widget插件的统一按钮响应单元,从而接收到目标widget的按钮触发的按钮响 应消息。步骤504,获取widget访问信息对象,并将widget访问信息对象发送给widget弓丨 擎代理。例如,widget插件的统一按钮响应单元根据widget按钮ID从按钮-Widget信息 映射表中获widget访问信息对象。并由统一按钮响应单元调用widget引擎代理,以便将 widget访问信息对象发送给widget引擎代理。步骤506,widget引擎代理根据widget访问信息对象获取上下文数据,根据 widget访问信息对象和上下文数据生成widget请求,并将widget请求发送给widget引 擎。例如,widget引擎代理从widget访问信息对象中取出上下文属性列表,根据上下文 属性从应用程序的application接口中获取上下文数据(包括应用程序的名称、当前文档 名称、当前文档页码、当前选择的文本数据、当前应用窗口位置或当前鼠标位置中的至少一 个);widget引擎代理根据widget访问信息对象和应用上下文数据生成widget请求消息, 并通过跨进程通信机制(如跨进程通信机制采用windows消息机制,也可以采用共享内存、 socket等跨进程通信技术与widget引擎通信)将widget请求消息发送给widget引擎。步骤508,widget引擎根据widget请求查找目标widget,检查目标widget状 态,并将widget显示在屏幕的最顶层。例如,widget引擎的隐含窗口的窗口处理函数从 C0PYDATA结构中取出widget请求消息,将widget请求消息传给widget调用单元,请求 调用目标widget ;widget调用单元根据widget标识从widget管理器获取目标widget, 根据目标widget的状态信息执行相应的操作如果目标widget未安装,则widget引擎 向widget引擎代理返回错误提示(如目标widget未安装);如果目标widget未触发,则 widget引擎触发目标widget ;如果目标widget已触发,则保存目标widget的显示状态信 息,其中显示状态信息包括目标widget的显示模式、widget窗口的大小和位置。最后由 widget调用单元调用目标widget的入口函数并将widget显示在桌面的最顶层。本发明提供的快速访问widget的方法的一个实施例中,widget引擎代理根据widget访问信息对象获取上下文数据进一步包括midget引擎代理从widget访问信息对 象中获取上下文属性列表,根据上下文属性从应用程序的接口中获取上下文数据;以及将 上下文数据转换为相应的字符串(如各种编码形式的字符串,如二进制字符串等)。本发明提供的快速访问widget的方法的一个实施例中,该方法还包括接收到目 标widget的还原按钮的触发响应消息,widget引擎将widget恢复为之前的显示状态。例 如,在接收到widget按钮触发响应消息后,widget引擎可以将当前系统显示的界面信息进 行保存;当用户浏览或使用完目标widget后,点击widget上的还原按钮,widget引擎接收 到目标widget的还原按钮的触发响应消息(即还原该widget的显示状态)后,由widget 引擎将widget恢复为之前的显示状态。具体来说,可以由Web引擎重画widget,通过控制 widget的window对象实现widget重画,将widget恢复为之前的显示状态。本发明提供了一种快速访问widget的方法,该方法能够在普通的应用程序中 方便、快速的访问widget,无需在应用窗口和widget窗口之间频繁切换,并且能够保持 widget原有的布局不变。图5示出本发明中通过COM插件技术在宿主程序创建插件工具栏并从宿主程序中 访问widget的方法的一个具体实施例的流程图。如图5所示,通过COM插件技术在宿主程序创建插件工具栏的流程主要涉及步骤 1. 1-1. 8,从宿主程序中访问widget的方法主要涉及步骤2. 1-2. 8 ;具体包括步骤1. 1,宿主程序加载widget应用插件,调用widget应用插件IDispatch接口 的 OnConnection 函数。步骤1. 2,OnConnection函数调用工具栏创建单元创建插件工具栏对象。步骤1. 3,工具栏创建单元从工具栏配置目录中读取与该应用对应的工具栏配置 文件(工具栏配置文件名就是应用ID),得到每个按钮的配置信息。Widget工具栏配置文 件示例如下< ? xml version = “ 1.0〃 encoding = “ UTF-8" ? ><widget_toolbar><widget_button button_name = 〃 查看天气〃icon = “ find—weather, png “ widget_id = “ weather “ widget—mode =〃 desktop"entry = " find_wether “ ><param_template>{city: ${selected_text}}</param_template></widget_button><widget_button button_name =〃 发送传真〃icon =" send_fax. png" widget_id = " fax" widget_mode = " desktop"entry = " init" ><param_template>{fax_file: ${file_name}}</param_template></widget_button></widget_toolbar>上述配置文件定义了含有两个按钮的widget工具栏,一个按钮是“查看天气”,
另一个按钮是“发送传真”。<widget_button>元素定义了 widget按钮信息,该元素的button_name属性为按钮名称,icon属性为按钮图标文件名,widget_id属性为widget标 识,用于确定widget,widget_window_id属性为widget窗口标识,用于确定widget窗口, window_entry属性为widget窗口入口函数名,是远程调用的javascript函数名 ,<widget_ button)元素的〈paramjemplate〉子元素定义了入口函数的参数模板,入口函数参数模板 是JSON(JavaScript ObjectNotation)格式的字符串模板,用于构造入口函数的JSON参 数,在入口函数参数模板中,模板变量用${XXX}标记,模板变量是参数模板的可变部分,用 于绑定应用上下文数据。本发明采用JSON封装widget请求消息和函数输入参数,但是本 领域技术人员知晓也可以采用XML封装widget请求消息和函数输入参数。步骤1. 4,工具栏创建单元循环调用统一按钮创建单元,每次根据按钮配置信息 <widget_button>创建一个按钮对象。步骤1. 5,统一按钮创建单元根据按钮配置信息中的图标文件名称从图标资源目 录中加载图标资源文件并与按钮对象绑定。步骤1. 6,统一按钮创建单元根据按钮配置信息创建widget访问信息对象,并将 该映射对象写入到按钮-widget信息映射哈希表中,其中key为按钮ID,value为widget 访问信息对象。widget访问信息对象为widget访问信息类(WidgetAccessInfo)的对象实 例,访问信息类的属性包括widget标识、widget窗口标识、widget窗口入口函数名称、入 口函数参数模板和上下文属性列表,其中widget标识、widget窗口标识、widget窗口入口 函数名称和入口参数模板分别与Widget_butt0n>元素的响应属性或子元素对应,上下文 属性列表则是对入口参数模板进行解释后提取出来的所有模板参数名称,例如对于入口参 数模板“ {city:${SeleCted_teXt}} ”,提取出的上下文属性只有一个selectecLtext。widget访问信息类定义的C++伪代码如下class WidgetAccessInfo {//widget 访问信息类public:string widget_id ;//widget 标识string widget_window_id ;//widget 窗口标识string entry_function ; //widget入口函数名称string paraml^emplate ;//入口 函数参数模板list<string>context_attr_names ;//在参数模板中定义的上下文属性列
表}步骤1. 7,统一按钮创建单元为按钮绑定统一按钮响应单元(即每个按钮的响应 函数均相同)。步骤1.8,工具栏创建单元调用宿主程序的Application接口将创建好的widget 工具栏对象添加到宿主程序的工具栏容器中。通过widget按钮访问widget窗口的流程具体包括步骤2. 1,用户点击宿主程序的widget按钮,触发统一按钮响应单元。步骤2. 2,统一按钮响应单元根据widget按钮ID从按钮-Widget信息映射表中获 widget访问信息对象。步骤2. 3统一按钮响应单元调用widget引擎代理,将widget访问信息对象传给 widget引擎代理。
步骤2. 4,widget引擎代理从widget访问信息对象中取出上下文属性列表,根 据上下文属性从宿主应用的application接口中获取上下文数据,并将上下文数据转换 为字符串。例如在word中,如果上下文属性为选择的文本数据(selectecLtext),则通过 application- > GetSelectionO函数获取选择的文字,如果上下文属性为当前文件全名 (full_file_name),则通过 application- > GetFullName ()获取文件全名。可能的上下 文属性至少包括当前应用名称(app_name)、当前文件全名(full_f ile_name,含路径)、当 前文件名称(file_name,不含路径)、当前文件路径(f ile_path)、选择的文字(selectecL text)、选择的区域(selected_region)、当前页(current_page)、当前鼠标位置(current_ mouse_point)。步骤2. 5,widget引擎代理根据widget访问信息对象和应用上下文数据生成 widget请求消息,并通过跨进程通信机制将widget请求消息发送给widget引擎(例如跨 进程通信机制采用windows消息机制,也可以采用共享内存、socket等跨进程通信技术与 widget引擎通信)。以跨进程通信机制采用windows消息机制为例进行说明Dwidget引擎代理从widget访问信息对象中取词入口参数模板,将参数模板中 的模板变量替换成在步骤2. 4中所获取到的应用上下文数据字符串,得到入口函数参数字 符串。例如对于入口参数模板“{city: $ {selectecLtext}}”,如果上下文数据selected, text的值为“广州”,那么对入口参数模板的参数SIselectecLtext}替换后,得到入口 函数的参数字符串“ {city:广州} ”,它是标准的JSON字符串,能够被符合W3C规范的 JavaScript引擎所识别。^widget引擎代理根据widget访问信息对象和入口函数参数字符串生成widget 请求消息,widget请求消息为JSON格式消息,结构如下{widget_id: ””,widget一window一id: ””,
entry_function””,
param_obj ””}在 widget 请求消息中,widget_id、widget_window_id 禾口 entry_function 来源与 widget访问信息对象,param_0bj属性为入口函数参数字符串。假设在word中基于上述配 置文件生成了 widget工具栏,而用户又点击了 “查看天气”按钮,那么生成的widget请求 消息如下{widget_id: "weather",widget_window_id:,,weather, today,,,entry_function:,,find_weather,,,param_obj : ” {city:广州} ” }3)获取widget引擎隐含窗口的句柄。4)通过windows的C0PYDATA结构封装widget请求消息,通过windows的消息子
12系统向Widget引擎隐含窗口发送WM_C0PYDATA消息。5)消息子系统通过窗口句柄找到widget引擎隐含窗口,调用隐含窗口的窗口处 理函数。步骤2. 6,窗口处理函数从C0PYDATA结构中取出widget请求消息,将widget请求 消息传给widget调用单元,请求调用目标widget。步骤2. 7,widget调用单元根据widget标识从widget管理器获取目标widget, 根据目标widget的状态信息进行相应处理如果目标widget未安装,则向widget弓丨擎代 理返回“widget不存在”消息,不做后续处理;如果目标widget尚未触发,则触发widget ; 如果目标widget已触发,则将widget的显示状态信息写入widget显示状态寄存器中,包 括widget的显示模式、widget窗口的大小和位置。步骤2. 8,widget调用单元调用目标widget的入口函数并将widget显示在桌面 的最顶层。1)如果widget请求消息中指定了入口函数,则通过目标widget的script对象 (document对象的属性)调用入口函数(entry_function)属性所指定的javascript函数, 并将入口函数参数字符串(param_obj)直接作为javascript函数的参数;2)将目标widget的显示模式设为由widget请求消息所指定的显示模式,然后通 过目标widget的window对象将目标widget的窗口移到屏幕中央,并置顶显示。在本发明 的实施例中,widget的显示模式是由DIV图层控制的,每种显示模式都有相对于的DIV图 层,改变显示模式只需显示相应显示模式的图层,而将其它显示模式的图层隐藏;3)当用户浏览或使用完widget之后,点击widget上的还原按钮,widget调用单 元将widget恢复为之前的显示状态,即从widget显示状态寄存器中读取widget的之前的 显示状态(显示模式、widget窗口的大小和位置),还原目标widget的显示模式,调用目标 widget的window对象恢复目标widget的窗口大小和位置。本发明提供了一种在应用程序中快速访问widget的方法,该方法通过在应用程 序中嵌入widget工具栏,能够满足用户在普通的应用程序中方便、快速的访问widget,从 而无需在应用窗口和widget窗口之间频繁切换。此外,该方法还能够保持widget原有的布 局不变,对应用程序和widget改动小,满足用户的使用的一致性,从而获得较高的认同感。参考前述本发明示例性的描述,本领域技术人员可以清楚的知晓本发明具有以下 优点1、本发明提供的在应用程序中嵌入widget工具栏的方法以及快速访问widget的 方法,在widget引擎中增加了远程访问接口、widget调用单元和widget窗口状态寄存器, 能够在普通的应用程序中方便地嵌入widget工具栏,以便实现用户对widget的便捷访问, 并且通过widget工具栏配置文件无需编译就能方便的修改嵌入应用的widget工具栏。2、本发明提供的在应用程序中嵌入widget工具栏的方法以及快速访问widget的 方法,通过Windows窗口消息机制向widget引擎发送widget调用请求,实现了跨进程调用 JavaScript脚本,并采用轻量级的JSON协议封装widget调用请求,提升了 widget调用请 求封装和解释的性能。3、本发明提供的在应用程序中嵌入widget工具栏的方法以及快速访问widget的 方法,能够在普通的应用程序中方便、快速的访问widget,无需在应用窗口和widget窗口之间频繁切换,并且能够保持widget原有的布局不变。 本发明的描述是为了示例和描述起见而给出的,而并不是无遗漏的或者将本发明 限于所公开的形式。很多修改和变化对于本领域的普通技术人员而言是显然的。选择和描 述实施例是为了更好说明本发明的原理和实际应用,并且使本领域的普通技术人员能够理 解本发明从而设计适于特定用途的带有各种修改的各种实施例。
权利要求
1.一种在应用程序中嵌入widget工具栏的方法,其特征在于,所述方法包括 所述应用程序加载widget插件,调用所述widget插件的接口函数; 所述接口函数调用工具栏创建单元,创建所述widget插件的工具栏对象;所述工具栏创建单元读取所述widget插件对应的工具栏配置文件,获取widget按钮 的配置信息,并创建对应的按钮对象;所述widget插件根据所述widget按钮的配置信息加载所述widget按钮的图标资源 文件,将所述图标资源文件与所述widget按钮绑定;根据所述widget按钮的配置信息创建widget访问信息对象,并将所述widget访问信 息对象与所述widget按钮的映射关系写入映射表中;以及将创建好的widget插件的工具栏对象添加到所述应用程序的工具栏容器中。
2.根据权利要求1所述的方法,其特征在于,将所述widget访问信息对象与所述 widget按钮的映射关系写入映射表中进一步包括将所述widget访问信息对象与所述 widget按钮的映射关系写入按钮-widget信息映射哈希表中;其中所述widget按钮的ID 作为所述按钮-widget信息映射哈希表的key关键字,所述widget访问信息对象作为所述 按钮-widget信息映射哈希表的value数值。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括根据所述widget按钮 的配置信息创建widget访问信息对象,并将所述widget访问信息对象与所述widget按钮 的映射关系写入映射表中后,统一按钮创建单元为所述widget按钮绑定统一按钮响应单兀。
4.根据权利要求1所述的方法,其特征在于,所述widget插件的工具栏配置文件包括 面向单个应用的应用专属widget工具栏配置文件和供多个应用共享的缺省widget工具栏 配置文件;其中所述widget工具栏配置文件的配置信息包括要放置的widget按钮名称、 所关联的widget标识、所关联的widget的显示模式、所关联的widget的输入参数类型列 表、widget按钮的图标文件名称和widget按钮的显示次序中的至少一个;所述widget访 问信息对象为widget访问信息类的对象实例,所述widget访问信息类的属性包括widget 标识、widget窗口标识、widget窗口入口函数名称、入口函数参数模板和上下文属性列表 中的至少一个。
5.根据权利要求1所述的方法,其特征在于,所述工具栏创建单元读取所述widget工 具栏配置文件时,优先读取与所述应用程序关联的widget工具栏配置文件;如果不存在与 所述应用程序关联的widget工具栏配置文件,则读取缺省的widget工具栏配置文件。
6.一种快速访问widget的方法,其特征在于,所述方法包括根据前述权利要求1-5中任意一项所述的方法,在应用程序中嵌入widget工具栏; 接收所述widget工具栏上的目标widget的按钮触发的按钮响应消息; 获取所述widget访问信息对象,并将所述widget访问信息对象发送给所述widget引 擎代理;所述widget引擎代理根据所述widget访问信息对象获取上下文数据,根据所述 widget访问信息对象和所述上下文数据生成widget请求;并将所述widget请求发送给 widget引擎;以及所述widget引擎根据所述widget请求查找所述目标widget,检查所述目标widget状态,并将widget显示在屏幕的最顶层。
7.根据权利要求6所述的方法,其特征在于,所述widget引擎代理根据所述widget访 问信息对象获取上下文数据进一步包括所述widget引擎代理从所述widget访问信息对 象中获取上下文属性列表,根据所述上下文属性从所述应用程序的接口中获取所述上下文 数据;以及将所述上下文数据转换为相应的字符串。
8.根据权利要求6所述的方法,其特征在于,接收到所述目标widget的还原按钮的触 发响应消息,所述widget引擎将所述widget恢复为之前的显示状态。
9.根据权利要求6所述的方法,其特征在于,所述上下文数据包括所述应用程序的名 称、当前文档名称、当前文档页码、当前选择的文本数据、当前应用窗口位置或当前鼠标位 置中的至少一个。
10.根据权利要求6所述的方法,其特征在于,所述widget引擎检查所述目标widget 状态进一步包括如果所述目标widget未安装,则所述widget引擎向所述widget引擎代理返回错误提示;如果所述目标widget未触发,则所述widget引擎触发所述目标widget ; 如果所述目标widget已触发,则保存所述目标widget的显示状态信息,其中所述显示 状态信息包括所述目标widget的显示模式、widget窗口的大小和位置。
全文摘要
本发明公开一种嵌入微件工具栏的方法和快速访问微件的方法。嵌入微件工具栏的方法包括应用程序加载微件插件,调用微件插件的接口函数;接口函数调用工具栏创建单元,创建微件插件的工具栏对象;工具栏创建单元读取微件插件对应的工具栏配置文件,获取微件按钮的配置信息,并创建对应的按钮对象;微件插件根据微件按钮的配置信息加载微件按钮的图标资源文件,将图标资源文件与微件按钮绑定;根据微件按钮的配置信息创建微件访问信息对象,并将微件访问信息对象与微件按钮的映射关系写入映射表中;以及将创建好的微件插件的工具栏对象添加到应用程序的工具栏容器中。本发明无需在应用窗口和微件窗口之间频繁切换,满足了用户快速访问微件的需要。
文档编号G06F9/44GK102129364SQ20101000117
公开日2011年7月20日 申请日期2010年1月14日 优先权日2010年1月14日
发明者何震苇, 李慧云, 钟伟彬, 陆钢 申请人:中国电信股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1