首页> 中国专利> 应用程序中嵌入微件工具栏的方法和快速访问微件的方法

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

摘要

本发明公开一种嵌入微件工具栏的方法和快速访问微件的方法。嵌入微件工具栏的方法包括应用程序加载微件插件,调用微件插件的接口函数;接口函数调用工具栏创建单元,创建微件插件的工具栏对象;工具栏创建单元读取微件插件对应的工具栏配置文件,获取微件按钮的配置信息,并创建对应的按钮对象;微件插件根据微件按钮的配置信息加载微件按钮的图标资源文件,将图标资源文件与微件按钮绑定;根据微件按钮的配置信息创建微件访问信息对象,并将微件访问信息对象与微件按钮的映射关系写入映射表中;以及将创建好的微件插件的工具栏对象添加到应用程序的工具栏容器中。本发明无需在应用窗口和微件窗口之间频繁切换,满足了用户快速访问微件的需要。

著录项

  • 公开/公告号CN102129364A

    专利类型发明专利

  • 公开/公告日2011-07-20

    原文格式PDF

  • 申请/专利权人 中国电信股份有限公司;

    申请/专利号CN201010001171.8

  • 发明设计人 何震苇;李慧云;钟伟彬;陆钢;

    申请日2010-01-14

  • 分类号G06F9/44(20060101);

  • 代理机构中国国际贸易促进委员会专利商标事务所;

  • 代理人颜镝

  • 地址 100032 北京市西城区金融大街31号

  • 入库时间 2023-12-18 02:56:11

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2013-09-25

    授权

    授权

  • 2011-08-31

    实质审查的生效 IPC(主分类):G06F9/44 申请日:20100114

    实质审查的生效

  • 2011-07-20

    公开

    公开

说明书

技术领域

本发明涉及计算机技术领域,尤其涉及一种在应用程序中嵌入微件(widget)工具栏和快速访问widget的方法。

背景技术

近年,一种被称为widget的本地化Web小应用程序在用户桌面环境中日益流行,其界面简洁、体积较小、响应较快、容易部署,不仅能在浏览器窗口中运行,还能脱离浏览器在用户桌面上运行。widget的脚本预先保存在本地,由一种被称为widget引擎的特殊的浏览器进行加载、解释和渲染,同时widget引擎还为widget提供访问本地资源和网络资源的能力。

图1示出现有技术中widget应用架构的结构示意图。如图1所示,符合万维网联盟(W3C,World Wide Web Consortium)规范的widget应用以HTML+JavaScript脚本实现。典型的widget应用由一个HTML主文件和该HTML主文件所引用的CSS样式文件、JS脚本文件和图标文件构成。widget应用一般有多种显示模式,如停靠模式(Docked)、桌面模式(Desktop)和全屏模式(FullScreen);在停靠模式下,widget窗口停靠在侧边栏中;在桌面模式下,widget窗口悬浮在桌面上;在全屏模式下,widget窗口最大化;widget可以在不同的显式模式之间切换,widget的显式模式通常采用HTML的DIV视图实现。在不同显示模式中,widget窗口的大小和显示的信息细节往往也不相同。widget应用由widget引擎承载,widget引擎主要由widget管理器和Web引擎构成,widget管理器负责widget的生命周期管理,包括widget的安装、加载、卸载,web引擎负责widget的脚本解释和渲染。widget引擎将widget加载后,先将widget的HTML和脚本解释成文档对象模型(DOM,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_COPYDATA)并将窗口消息提交给操作系统的消息子系统;3)消息子系统通过窗口句柄找到对应的窗口,调用该窗口的窗口处理函数。使用windows消息机制向窗口发送消息的前提是能够获取到窗口句柄,由于widget窗口是widget引擎在桌面上描绘的逻辑窗口,没有窗口句柄,因此采用widows消息机制无法直接向widget窗口发送消息。另外,widget是由JS(JavaScript)脚本实现的,当前现有技术还无法做到跨进程调用JS脚本。

发明内容

本发明要解决的一个技术问题是提供一种在应用程序中嵌入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按钮的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访问信息对象获取上下文数据进一步包括: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原有的布局不变。

附图说明

图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插件的接口OnConnection函数后,由该OnConnection函数调用工具栏创建单元创建插件工具栏对象。

步骤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引擎的隐含窗口的窗口处理函数从COPYDATA结构中取出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恢复为之前的显示状态。具体来说,可以由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>元素的<param_template>子元素定义了入口函数的参数模板,入口函数参数模板是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_button>元素的响应属性或子元素对应,上下文属性列表则是对入口参数模板进行解释后提取出来的所有模板参数名称,例如对于入口参数模板“{city:${selected_text}}”,提取出的上下文属性只有一个selected_text。

widget访问信息类定义的C++伪代码如下:

class WidgetAccessInfo{//widget访问信息类

public:

string widget_id;//widget标识

string widget_window_id;//widget窗口标识

string entry_function;//widget入口函数名称

string paramTemplate;//入口函数参数模板

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中,如果上下文属性为选择的文本数据(selected_text),则通过application->GetSelection()函数获取选择的文字,如果上下文属性为当前文件全名(full_file_name),则通过application->GetFullName()获取文件全名。可能的上下文属性至少包括:当前应用名称(app_name)、当前文件全名(full_file_name,含路径)、当前文件名称(file_name,不含路径)、当前文件路径(file_path)、选择的文字(selected_text)、选择的区域(selected_region)、当前页(current_page)、当前鼠标位置(current_mouse_point)。

步骤2.5,widget引擎代理根据widget访问信息对象和应用上下文数据生成widget请求消息,并通过跨进程通信机制将widget请求消息发送给widget引擎(例如跨进程通信机制采用windows消息机制,也可以采用共享内存、socket等跨进程通信技术与widget引擎通信)。以跨进程通信机制采用windows消息机制为例进行说明:

1)widget引擎代理从widget访问信息对象中取词入口参数模板,将参数模板中的模板变量替换成在步骤2.4中所获取到的应用上下文数据字符串,得到入口函数参数字符串。例如对于入口参数模板“{city:${selected_text}}”,如果上下文数据selected_text的值为“广州”,那么对入口参数模板的参数${selected_text}替换后,得到入口函数的参数字符串“{city:广州}”,它是标准的JSON字符串,能够被符合W3C规范的JavaScript引擎所识别。

2)widget引擎代理根据widget访问信息对象和入口函数参数字符串生成widget请求消息,widget请求消息为JSON格式消息,结构如下:

{

widget_id:””,

widget_window_id:””,

entry_function:””,

param_obj:””

}

在widget请求消息中,widget_id、widget_window_id和entry_function来源与widget访问信息对象,param_obj属性为入口函数参数字符串。假设在word中基于上述配置文件生成了widget工具栏,而用户又点击了“查看天气”按钮,那么生成的widget请求消息如下:

{

widget_id:”weather”,

widget_window_id:”weather.today”,

entry_function:”find_weather”,

param_obj:”{city:广州}”

}

3)获取widget引擎隐含窗口的句柄。

4)通过windows的COPYDATA结构封装widget请求消息,通过windows的消息子系统向widget引擎隐含窗口发送WM_COPYDATA消息。

5)消息子系统通过窗口句柄找到widget引擎隐含窗口,调用隐含窗口的窗口处理函数。

步骤2.6,窗口处理函数从COPYDATA结构中取出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原有的布局不变。

本发明的描述是为了示例和描述起见而给出的,而并不是无遗漏的或者将本发明限于所公开的形式。很多修改和变化对于本领域的普通技术人员而言是显然的。选择和描述实施例是为了更好说明本发明的原理和实际应用,并且使本领域的普通技术人员能够理解本发明从而设计适于特定用途的带有各种修改的各种实施例。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号