CN101996095B - 插件接入即时通讯程序的方法和装置 - Google Patents
插件接入即时通讯程序的方法和装置 Download PDFInfo
- Publication number
- CN101996095B CN101996095B CN200910168488.8A CN200910168488A CN101996095B CN 101996095 B CN101996095 B CN 101996095B CN 200910168488 A CN200910168488 A CN 200910168488A CN 101996095 B CN101996095 B CN 101996095B
- Authority
- CN
- China
- Prior art keywords
- window
- plug
- unit
- agent
- message
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本申请提供了插件接入即时通讯程序的方法、装置和***,所述方法包括:在即时通讯IM软件中,IM程序创建包括开放接入区域的开放窗口;加载器进程创建代理窗口作为所述开放窗口的子窗口,所述加载器进程为所述IM程序创建的独立进程;所述代理窗口对应的代理模块创建插件窗口,所述插件窗口为所述代理窗口的子窗口。与现有技术不同的是,在本申请实施例中,就可以在后续进行用户界面UI消息交互的时候,缩短IM界面的响应时间,提高了主进程与插件进程之间的响应效率。
Description
技术领域
本申请涉及计算机网络应用领域,特别涉及插件接入即时通讯(IM)程序的方法和装置。
背景技术
宿主程序是用于供插件运行的载体,同时也制定了插件的接入规范,一般情况下即时通讯(Instant Messaging,IM)程序即是宿主程序。插件为一种程序模块,即是指符合服务平台的接入规范,能够运行于服务平台的,并且非服务平台本身所必须的功能或者业务模块。从物理形式上讲,包含但不局限于动态链接库(Dynamic Link Library,DLL)。窗口型插件是指插件以一个内嵌窗口的形式展现在即时通讯软件程序中,所述内嵌窗口就是内嵌到IM程序的一个区域。可以参考图1所示,为实际中一个内嵌窗口的示意图。其中,用方框框出的部分是一个天气预报插件,而这个插件所展示的界面(插件窗口)是插件提供的;而IM程序只是提供了一个可供插件接入的区域。
现有技术中,有一种插件接入宿主程序的方法,该插件以及插件窗口均创建于独立进程,即插件窗口不是由主进程创建的,该插件窗口是用户可见的,该独立进程还将此插件窗口直接作为即时通讯开放区域的子窗口;插件窗口作为子窗口和即时通讯程序父窗口之间的用户界面(User Interface,UI)业务全部跨越进程进行,其中,UI业务指代IM程序父窗口发生变化时和插件窗口之间的消息交互。在实际应用中,当用户在IM程序的界面上点击插件窗口时,该UI消息的处理代码将会运行于插件窗口所处的独立进程,同时,IM程序因为IM程序父窗口的变化而产生的UI消息,每次在发送至插件窗口对应的插件模块时,都需要在收到插件模块对于当前UI消息的响应之后才能进行后续处理。
因此,该方法同时存在如下缺点:插件窗口的父窗口即是开放窗口(位于宿主程序内)与插件窗口分别位于两个进程内,因此两个窗口进行通讯时就是跨进程通讯;并且IM程序窗口和插件窗口每一次进行UI消息交互时,IM程序都需要父窗口等待子窗口的返回消息,因此,IM程序的界面响应时间过长,IM界面的响应效率较低。
总之,目前需要本领域技术人员迫切解决的一个技术问题就是:如何能够创新的提出一种插件接入即时通讯程序的方法,以解决现有技术中界面的响应时间过长以及响应效率较低的问题。
发明内容
本申请所要解决的技术问题是提供一种插件接入即时通讯程序的方法,用以解决界面的响应时间过长以及响应效率较低的问题。
本申请还提供了一种插件接入即时通讯程序的装置,用以保证上述方法在实际中的实现及应用。
为了解决上述问题,本申请公开了一种插件接入即时通讯程序的方法,包括:
在即时通讯IM软件中,IM程序创建包括开放接入区域的开放窗口;
加载器进程根据所述开放窗口创建代理窗口,所述代理窗口为所述开放窗口的子窗口,所述加载器进程为所述IM程序创建的独立进程;
所述代理窗口对应的代理模块创建插件窗口,所述插件窗口为所述代理窗口的子窗口。
优选的,所述代理窗口对应的代理模块创建插件窗口,具体包括:
所述代理模块将代理窗口的句柄传送给插件;
所述插件将所述代理窗口的句柄作为父窗口句柄来创建子窗口,所述子窗口为插件窗口。
优选的,所述代理窗口对应的代理模块创建插件窗口,具体包括:
所述代理窗口对应的代理模块创建一个插件窗口;
判断是否存在其他插件,如果是,则继续创建所述其他插件对应的插件窗口;如果否,则结束流程。
本申请提供了一种处理用户界面消息的方法,在采用上述插件接入即时通讯程序的方法在IM程序中接入插件之后,该方法包括:
所述代理窗口对应的代理模块接收到用户界面UI消息时,根据所述插件类型判断是否需要插件处理;
如果是,则将所述UI消息转发至所述插件,如果否,则所述代理模块直接处理所述UI消息。
优选的,所述代理窗口直接处理所述UI消息,具体包括:
所述代理窗口将所述UI消息直接丢弃,或者,所述代理模块将所述UI进行缓存,以便于后续发送至插件。
本申请还提供了一种插件接入即时通讯程序的装置,该装置包括:
IM程序模块,用于在即时通讯IM软件中,创建包括开放接入区域的开放窗口;
加载器进程模块,用于根据所述开放窗口创建代理窗口,所述代理窗口为所述开放窗口的子窗口,所述加载器进程为所述IM程序创建的独立进程;
代理模块,用于所述代理窗口对应的代理模块创建插件窗口,所述插件窗口为所述代理窗口的子窗口。
优选的,所述代理模块具体用于将代理窗口的句柄作为父窗口句柄传送给插件,以便于所述插件创建所述父窗口的子窗口,所述子窗口为插件窗口。
优选的,所述代理模块包括:
创建子模块,用于创建一个插件窗口;
判断子模块,用于判断是否存在其他插件,如果是,则继续创建所述其他插件对应的插件窗口;如果否,则结束流程。
本申请还提供了一种处理用户界面消息的***,该***包括:
接入装置,用于采用如权利要求1所述的方法在IM程序中接入插件;
代理模块,用于接收到用户界面UI消息时,根据所述插件类型判断是否需要插件处理;
转发模块,用于当所述代理模块的判断结果为是时,则将所述UI消息转发至所述插件;
直接处理模块,用于当所述转发模块的判断结果为否时,则所述代理窗口则直接处理所述UI消息。
优选的,所述直接处理模块,具体包括:
丢弃子模块,用于将所述UI消息直接丢弃;
缓存子模块,用于将所述UI进行缓存,以便于后续发送至插件。
与现有技术相比,本申请包括以下优点:
在本申请实施例中,在即时通讯IM软件中,IM程序创建包括开放接入区域的开放窗口;加载器进程创建代理窗口作为所述开放窗口的子窗口,所述加载器进程为所述IM程序创建的独立进程;所述代理窗口对应的代理模块创建插件窗口,所述插件窗口为所述代理窗口的子窗口。在本申请实施例中,在插件窗口和开放窗口之间又加入了一层代理窗口,因此在后续需要开放窗口与插件窗口之间进行UI消息交互时,就可以由代理窗口首先判断该UI消息是否需要插件处理,从而在插件处理UI消息的同时,或者不需要插件处理时,直接返回,即是本次UI消息处理过程结束了,这样就缩短了界面的响应时间,提高了主进程与插件进程之间的响应效率。当然,实施本申请的任一产品并不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是现有技术中插件窗口的示意图;
图2是本申请在实际应用中的结构示意图;
图3是本申请的一种窗口插件接入即时通讯程序的方法实施例1的流程图;
图4是本申请的一种窗口插件接入即时通讯程序的方法实施例2的流程图;
图5是本申请的一种处理用户界面消息的方法实施例的流程图;
图6是本申请的一种窗口插件接入即时通讯程序的装置实施例1的结构框图;
图7是本申请的一种窗口插件接入即时通讯程序的装置实施例2的结构框图;
图8是本申请的一种处理用户界面消息的***实施例的结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请可用于众多通用或专用的计算装置环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器装置、包括以上任何装置或设备的分布式计算环境等等。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本申请的主要思想包括,参考图2所示,为本实施例在实际应用中的一个结构示意图,可以看出,在即时通讯程序的主进程中创建开放窗口之后,即时通讯程序启动了加载器进程,由加载器进程创建了一个代理插件,而代理插件又创建一个代理窗口,并将该代理窗口设置为IM界面上开放窗口的子窗口,然后加载器进程内与代理窗口对应的代理模块再加载实际中的应用插件,该应用插件再创建一个插件窗口,并将所述代理窗口作为该插件窗口的父窗口。其中,代理窗口是代理插件创建的窗口,是图形界面意义上的窗口,是用户不可见的。因此本实施例与现有技术不同,在插件窗口和开放窗口之间又加入了一层代理窗口,因此在后续需要开放窗口与插件窗口之间进行UI消息交互时,就可以由代理窗口对应的代理模块首先判断该UI消息是否需要插件处理。需要时可以将UI消息放入一个队列,后续再转发至应用插件,即是可以推迟应用插件处理的时间。不需要应用插件处理时,直接返回,即是本次UI消息处理过程结束了。这样就缩短了界面的响应时间,提高了主进程与应用插件进程之间的响应效率。
参考图3,示出了本申请一种插件接入即时通讯程序的方法实施例1的流程图,可以包括以下步骤:
步骤301:在即时通讯IM软件中,IM程序创建包括开放接入区域的开放窗口;
在IM软件中,当用户登录之后,IM程序会创建一个包括开放接入区域的开放窗口,其中,该开放窗口可以为用户所见,也可以不为用户所见,但是存在这样一个开放窗口,可以用于接入应用插件;其中,所述应用插件即是实际中各种类型的插件,之所以称为应用插件是为了和前述的代理插件相区分;
步骤302:加载器进程创建代理窗口作为所述开放窗口的子窗口,所述加载器进程为所述IM程序创建的独立进程;
当IM程序创建了所述开放窗口之后,在实际应用中,可以在收到插件管理器发送了开放窗口已经建立的通知之后,另外创建一个加载器进程;其中,所述插件管理器可以用于检测IM程序的插件使用情况,当检测到开放窗口被创建之后,就通知IM程序;所述加载器进程可以为不同于IM程序对应的主进程的其他独立进程;
该加载器进程创建代理窗口,该代理窗口可以使用windows提供的标准API SetParent函数将自己设置为开放窗口的子窗口,即该代理窗口作为所述开放窗口在加载器进程内的子窗口,该代理窗口在实际中的创建过程和其他任何应用插件窗口的创建过程相同;具体的,所述加载器进程可以通过创建一个代理插件的方式,由代理插件来创建对应的代理窗口,所述代理窗口对应的后台业务处理代码为代理模块;该代理窗口是用户不可见的,由加载器进程创建该代理窗口之后,就可以使得由开放窗口的变化所产生的消息首先到达代理窗口;
步骤303:所述代理窗口对应的代理模块创建应用插件窗口,所述插件窗口为所述代理窗口的子窗口。
所述代理窗口对应的代理模块创建应用插件窗口,具体的,所述代理模块可以加载实际中的应用插件,由应用插件的程序模块创建应用插件窗口,并将代理窗口设置为该应用插件窗口的父窗口,即是所述代理窗口和所述插件窗口互为父子窗口,并且在同一个进程内。同时,当有多个插件需要接入IM程序时,可以配置为每个应用插件对应一个加载器进程,也可以配置为多个应用插件共享某一个进程;具体的,在实际应用中,可以由供应商为插件进行编号,标记为共享的或者独占的;当***检测到共享的插件时,就检查是否已经有共享的加载器进程存在;如果存在就获取该共享的加载器进程;否则就创建加载器进程。
本实施例中的原理就是在跨越两个进程(主进程和加载器进程)的原父子窗口之间加了一层代理窗口,而这个代理窗口和插件窗口位于同一进程,这样在后续处理UI消息的时候,就能够因为代理窗口对应的代理模块和插件窗口对应的插件模块处于同一进程,并且代理窗口作为一层辅助窗口,可以先于插件窗口收到开放窗口的UI消息,从而由代理模块首先将消息响应返回给开放窗口所处的宿主程序,这样IM程序就无需等待插件在处理完一次UI消息返回的响应了,这就减少了IM界面与插件之间的交互时间,提高了UI消息处理的效率,同时能够提高开放窗口和插件窗口之间的UI交互效率。
参考图4,示出了本申请的插件接入即时通讯程序的方法实施例2的流程图,可以包括以下步骤:
步骤401:在即时通讯IM软件中,IM程序创建包括开放接入区域的开放窗口;
步骤402:所述IM程序创建一个独立进程作为加载器进程;
其中,创建加载器进程在实际应用中即是启动一个可执行程序,同时IM程序可以将开放窗口的句柄hSlot传给所述加载器进程,以便于所述加载器进程根据所述句柄来创建开放窗口的子窗口,在实际中,加载器进程在创建窗口之前,会收到Windows***发送的开放窗口的句柄,即是加载器进程只需将这个句柄和代理窗口的句柄设置为父子关系即可;所述句柄为windows的标准用语,窗口句柄则用于唯一标识一个窗口;
步骤403:加载器进程创建代理窗口作为所述开放窗口的子窗口;
所述加载器进程将这个代理窗口设置为开放窗口hSlot的子窗口,假设代理窗口的句柄为hProxy;其中,创建窗口的操作为windows标准动作;句柄的名称可以任意设置,只需做到在当前IM程序的任何进程中能够唯一即可;
具体的,加载器进程在这个过程中,可以首先创建一个代理插件,然后由代理插件来创建对应的代理窗口;例如,存在一个代理模块叫做proxy.dll,而该dll被加载器进程加载后,其内部代码将创建一个与代理模块对应的代理窗口;所述代理模块为后台程序运行时与代理窗口对应的一段代码;
步骤404:所述代理模块将代理窗口的句柄传送给插件;其中,插件规范例规定,当插件窗口被创建的时候,所处的宿主程序会将其父窗口的窗口句柄告知插件窗口,因此,代理模块再将代理窗口的句柄hProxy作为父窗口句柄传送给插件;
步骤405:所述插件依据所述代理窗口的句柄创建子窗口,所述子窗口为插件窗口;
需要说明的是,插件的窗口由插件自己创建,具体过程是,插件需要将自己的窗口设置为宿主程序传送进来的窗口句柄的子窗口句柄,而在本实施例中,对插件来说,就会认为所述代理窗口的句柄就是IM的开放窗口句柄;
在本步骤中即是同时将hProxy设置为自己的父窗口;在实际应用中,Windows直接提供API函数SetParent即可完成本步骤中内容;其中,插件在被加载时候,不需要知道接收到的父窗口是谁,只需要能够接收到一个父窗口即可;
其中,所述API函数SetParent可以参考如下代码:
HWND SetParent(
HWND hWndChild,
HWND hWndNewParent
);
步骤406:判断是否存在其他需要加载的插件,如果是,则进入步骤407;如果否,则结束流程。
加载器进程在创建一个插件对应的插件窗口之后,继续判断是否存在其他插件,如果存在,则继续常见其他对应的插件窗口,如果不存在,则结束流程。
步骤407:继续创建所述其他插件对应的插件窗口。
本实施例中的方案即是当存在多个插件时,需要首先判断是否还存在其他插件,如果存在,则采用介绍过的方法继续创建插件窗口,并且,在创建窗口时,由IM程序创建的加载器进程来创建代理窗口,从而使得代理窗口和插件窗口都存在加载器进程中,与现有技术中所有的用户界面消息都需要跨越主进程和插件进程,从而主界面的响应时间就长的缺点相比,本实施例所述的方法,可以将不需要插件处理的UI消息直接由代理窗口处理,或者由代理窗口暂时缓存,后续在发送至插件处理,从而提高了界面的响应时间。
参考图5,示出了本申请一种处理用户界面消息的方法实施例的流程图,可以包括以下步骤:
步骤501:在即时通讯IM软件中,IM程序创建包括开放接入区域的开放窗口;
步骤502:加载器进程创建代理窗口作为所述开放窗口的子窗口,所述加载器进程为所述IM程序创建的独立进程;
步骤503:所述代理窗口对应的代理模块创建插件窗口,所述插件窗口为所述代理窗口的子窗口;
前述步骤为在当前IM程序中接入插件的过程;
步骤504:所述代理窗口接收到用户界面UI消息时,代理窗口对应的代理模块根据所述插件类型判断是否需要插件处理,如果是,则进入步骤505,如果否,则进入步骤506;
其中,当用户对当前IM软件的界面进行了相应的操作,例如,用户拖动当前IM软件的界面,或者改变了当前IM界面的大小,则IM程序将会以窗口消息的方式通知所述代理窗口,则后台运行的代理模块则根据接入的插件类型来判断是否需要插件立即处理;
需要说明的是,插件自身具备一些属性,是已经设置好的,例如,某个插件在开放窗口中的属性为“根据开放窗口变换大小”,以及“背景色保持不变”等,那么当代理窗口接收到的UI消息为背景色发生了变化的时候,则所述代理窗口则可以将该UI消息判断为“不需要插件处理”的UI消息,如果代理窗口接收到的UI消息为“IM程序的窗口大小发生变换”的时候,则所述代理窗口则可以将该UI消息判断为需要插件处理的UI消息;因此,可以看出,根据实际情况中插件类型的不同,以及UI消息的类型不同,可以有很多种判断标准,本发明在此不再一一列举;
步骤505:将所述UI消息转发至所述插件。
所述代理窗口对应的代理模块将所述UI消息直接转发至所述插件;需要说明的是,在代理模块将所述UI消息直接转发至所述插件的时候,还可以更具体的分为,是否需要插件立即处理,例如,当IM程序的界面大小正在被改变(即是用户拖动当前IM程序的界面不放),则所述UI消息插件无需立即处理,如果IM程序的界面大小已经改变完成,则所述插件可以一次性的进行刷新插件窗口;
步骤506:所述代理窗口直接处理所述UI消息。
所述代理窗口直接处理所述UI消息,可以直接将其丢弃,不做任何处理,同时直接返回至所述IM程序的开放窗口,表示本次由开放窗口触发的UI消息处理过程结束。在实际应用中,例如,插件窗口的位置是固定的,那么当开放窗口变化的时候,因为父子关系的窗口需要直接进行消息交互,所以开放窗口的子窗口即是代理窗口直接处理即可,不需要由插件窗口处理;其中,Windows有一套窗口规范,其中父子窗口间存在的通讯,由windows规定,像本实施例中前述的界面大小在变化中,以及变化后,windows将自动发送消息;
其中,所述步骤506在另一个实施例可以包括:
所述代理窗口将所述UI消息可以直接丢弃,或者,所述代理窗口可以将所述UI进行缓存,以便于后续发送至插件。
在本实施例中,代理窗口可以预先根据插件类型还有UI消息的具体内容预先进行了一次判断,看所有的UI消息是否都需要插件处理,如果不需要就可以直接返回,这样就相当于对其中一些UI消息进行了优化,就在一定程序上降低了UI消息的阻塞时间,从而提高了界面响应速度,并且代理窗口和插件窗口在一个进程中,并不是所有的UI消息都需要在插件窗口和开放窗口之间跨越进程交互的,这样就会提高界面响应速度。
对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
与上述本申请一种插件接入即时通讯程序的方法实施例1所提供的方法相对应,参见图6,本申请还提供了插件接入即时通讯程序的装置实施例1,在本实施例中,该装置可以包括:
IM程序模块601,用于在即时通讯IM软件中,创建包括开放接入区域的开放窗口;
在IM软件中,当用户登录之后,IM程序模块会创建一个包括开放接入区域的开放窗口,其中,该开放窗口可以为用户所见,也可以不为用户所见,但是存在这样一个开放窗口,用于接入插件;
加载器进程模块602,用于创建代理窗口作为所述开放窗口的子窗口,所述加载器进程为所述IM程序创建的独立进程;
当IM程序模块创建了所述开放窗口之后,在实际应用中,可以在收到插件管理器发送了开放窗口已经建立的通知之后,另外创建一个加载器进程;其中,所述插件管理器可以用于检测IM程序的插件使用情况,当检测到开放窗口被创建之后,就通知IM程序模块;所述加载器进程模块可以采用不同于IM程序对应的主进程的其他独立进程实现;需要说明的是,由于存在代理模块,因此加载器进程的实现不能直接使用插件进程,因为插件进程不知道如何使用代理模块,只有加载器进程,才可以让已经存在的插件代码不需要修改就能直接使用,因为加载器进程模块可以透明处理了间接窗口(即是代理窗口);其中,所述透明处理可以理解为,对于IM程序内的开放窗口来说,意味着自己进行交互的就是插件,反过来对于插件来说,意味着自己的父窗口就是IM程序的开放窗口,也就是代理窗口已经“透明化”;
该加载器进程模块创建代理窗口,该代理窗口作为所述开放窗口在加载器进程内的子窗口,该代理窗口在实际的创建过程中和其他任何插件窗口的创建过程相同;
代理模块603,用于所述代理窗口对应的代理模块创建插件窗口,所述插件窗口为所述代理窗口的子窗口。
本实施例中的原理就是在跨越两个进程(主进程和加载器进程)的原父子窗口之间加了一层代理窗口,而这个代理窗口和插件窗口位于同一进程,这样在后续处理UI消息的时候,就能够因为代理窗口和插件窗口处于同一进城,从而减少了交互时间,提高了消息处理的效率,同时能够提高父子窗口之间的UI交互效率。
与上述本申请一种插件接入即时通讯程序的方法实施例2所提供的方法相对应,参见图7,本申请还提供了一种插件接入即时通讯程序的装置的实施例2,在本实施例中,该装置具体可以包括:
IM程序模块601,用于在即时通讯IM软件中,创建包括开放接入区域的开放窗口;
加载器进程模块602,用于创建代理窗口作为所述开放窗口的子窗口,所述加载器进程为所述IM程序创建的独立进程;
其中,创建加载器进程在实际应用中即是启动一个可执行程序,同时IM程序可以将开放窗口的句柄hSlot传给所述加载器进程,以便于所述加载器进程根据所述句柄来创建开放窗口的子窗口;所述句柄为windows的标准用语,窗口句柄则用于唯一标识一个窗口;
所述加载器将这个代理窗口设置为开放窗口hSlot的子窗口,假设代理窗口的句柄为hProxy;其中,创建窗口的操作为windows标准动作;句柄的名称可以任意设置,只需做到在当前IM程序的任何进程中唯一即可;
代理模块603在实际应用中,可以具体用于将代理窗口的句柄作为父窗口句柄传送给插件,以便于所述插件创建所述父窗口的子窗口,所述子窗口为插件窗口。
其中,插件规范例规定,当插件窗口被创建的时候,所处的宿主程序会告知父窗口的窗口句柄,因此,代理模块再将代理窗口的句柄hProxy作为父窗口句柄传送给插件;在本实施例中包括两个子模块,创建子模块701,用于创建一个插件窗口;
判断子模块702,用于判断是否存在其他插件,如果是,则继续创建所述其他插件对应的插件窗口;如果否,则结束流程。
加载器进程在创建一个插件对应的插件窗口之后,继续判断是否存在其他插件,如果存在,则继续常见其他对应的插件窗口,如果不存在,则结束流程。
与现有技术中所有的用户界面消息都需要跨越主进程和插件进程,从而主界面的响应时间就长的缺点相比,本实施例所述的方法,可以将不需要插件处理的UI消息直接由代理窗口处理,或者由代理窗口暂时缓存,后续在发送至插件处理,从而提高了界面的响应时间。
与上述本申请一种处理用户界面消息的方法实施例所提供的方法相对应,参见图8,本申请还提供了一种处理用户界面消息的***实施例,在本实施例中,该***具体可以包括:
接入装置801,用于采用如权利要求1所述的方法在IM程序中接入插件;
其中,所述接入装置801包括:
IM程序模块,用于在即时通讯IM软件中,创建包括开放接入区域的开放窗口;
加载器进程模块,用于创建代理窗口作为所述开放窗口的子窗口,所述加载器进程为所述IM程序创建的独立进程;
代理模块,用于所述代理窗口对应的代理模块创建插件窗口,所述插件窗口为所述代理窗口的子窗口。
判断模块802,用于接收到用户界面UI消息时,根据所述插件类型判断是否需要插件处理;
其中,当用户对当前IM软件的界面进行了相应的操作,例如,用户拖动当前IM软件的界面,或者改变了当前IM界面的大小,则IM程序将会以窗口消息的方式通知所述代理窗口,则后台运行的代理模块则根据接入的插件类型来判断是否需要插件立即处理;
需要说明的是,插件自身具备一些属性,是已经设置好的,例如,某个插件在开放窗口中的属性为“根据开放窗口变换大小”,以及“背景色保持不变”等,那么当代理窗口接收到的UI消息为背景色发生了变化的时候,则所述代理窗口则可以将该UI消息判断为“不需要插件处理”的UI消息,如果代理窗口接收到的UI消息为“IM程序的窗口大小发生变换”的时候,则所述代理窗口则可以将该UI消息判断为需要插件处理的UI消息;因此,可以看出,根据实际情况中插件类型的不同,以及UI消息的类型不同,可以有很多种判断标准,本发明在此不再一一列举;
转发模块803,用于当所述判断模块的判断结果为是时,则将所述UI消息转发至所述插件;
所述转发模块将所述UI消息直接转发至所述插件;需要说明的是,在代理模块将所述UI消息直接转发至所述插件的时候,还可以更具体的分为,是否需要插件立即处理,例如,当IM程序的界面大小正在被改变(即是用户拖动当前IM程序的界面不放),则所述UI消息插件无需立即处理,如果IM程序的界面大小已经改变完成,则所述插件可以一次性的进行刷新插件窗口;
直接处理模块804,用于当所述转发模块的判断结果为否时,则所述代理窗口则直接处理所述UI消息。
所述直接处理模块804具体可以直接处理所述UI消息,可以直接将其丢弃,不做任何处理,同时直接返回至所述IM程序的开放窗口,表示本次由开放窗口触发的UI消息处理过程结束。
所述直接处理模块804,具体包括:
丢弃子模块,用于将所述UI消息直接丢弃;
缓存子模块,用于将所述UI进行缓存,以便于后续发送至插件。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上对本申请所提供的插件接入即时通讯程序的方法和装置进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (10)
1.一种插件接入即时通讯程序的方法,其特征在于,该方法包括:
在即时通讯IM软件中,IM程序创建包括开放接入区域的开放窗口,所述开放窗口用于接入应用插件;
加载器进程根据所述开放窗口创建代理窗口,所述代理窗口为所述开放窗口的子窗口,所述加载器进程为所述IM程序创建的独立进程;
所述代理窗口对应的代理模块创建插件窗口,所述插件窗口为所述代理窗口的子窗口;所述插件窗口与所述代理窗口处于同一进程。
2.根据权利要求1所述的方法,其特征在于,所述代理窗口对应的代理模块创建插件窗口,具体包括:
所述代理模块将代理窗口的句柄传送给插件;
所述插件将所述代理窗口的句柄作为父窗口句柄来创建子窗口,所述子窗口为插件窗口。
3.根据权利要求1所述的方法,其特征在于,所述代理窗口对应的代理模块创建插件窗口,具体包括:
所述代理窗口对应的代理模块创建一个插件窗口;
判断是否存在其他插件,如果是,则继续创建所述其他插件对应的插件窗口;如果否,则结束流程。
4.一种处理用户界面消息的方法,采用如权利要求1所述的方法在IM程序中接入插件,其特征在于,该方法包括:
所述代理窗口对应的代理模块接收到用户界面UI消息时,根据所述插件类型判断是否需要插件处理;
如果是,则将所述UI消息转发至所述插件,如果否,则所述代理模块直接处理所述UI消息。
5.根据权利要求4所述的方法,其特征在于,所述代理窗口直接处理所述UI消息,具体包括:
所述代理窗口将所述UI消息直接丢弃,或者,所述代理模块将所述UI进行缓存,以便于后续发送至插件。
6.一种插件接入即时通讯程序的装置,其特征在于,该装置包括:
IM程序模块,用于在即时通讯IM软件中,创建包括开放接入区域的开放窗口,所述开放窗口用于接入应用插件;
加载器进程模块,用于根据所述开放窗口创建代理窗口,所述代理窗口为所述开放窗口的子窗口,所述加载器进程为所述IM程序创建的独立进程;
代理模块,用于所述代理窗口对应的代理模块创建插件窗口,所述插件窗口为所述代理窗口的子窗口;所述插件窗口与所述代理窗口处于同一进程。
7.根据权利要求6所述的装置,其特征在于,所述代理模块具体用于将代理窗口的句柄作为父窗口句柄传送给插件,以便于所述插件创建所述父窗口的子窗口,所述子窗口为插件窗口。
8.根据权利要求6所述的装置,其特征在于,所述代理模块包括:
创建子模块,用于创建一个插件窗口;
判断子模块,用于判断是否存在其他插件,如果是,则继续创建所述其他插件对应的插件窗口;如果否,则结束流程。
9.一种处理用户界面消息的***,其特征在于,该***包括:
接入装置,用于采用如权利要求1所述的方法在IM程序中接入插件;
代理模块,用于接收到用户界面UI消息时,根据所述插件类型判断是否需要插件处理;
转发模块,用于当所述代理模块的判断结果为是时,则将所述UI消息转发至所述插件;
直接处理模块,用于当所述转发模块的判断结果为否时,则所述代理窗口则直接处理所述UI消息。
10.根据权利要求9所述的***,其特征在于,所述直接处理模块,具体包括:
丢弃子模块,用于将所述UI消息直接丢弃;
缓存子模块,用于将所述UI进行缓存,以便于后续发送至插件。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910168488.8A CN101996095B (zh) | 2009-08-26 | 2009-08-26 | 插件接入即时通讯程序的方法和装置 |
HK11103960.7A HK1149817A1 (zh) | 2009-08-26 | 2011-04-19 | 插件接入即時通訊程序的方法和裝置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910168488.8A CN101996095B (zh) | 2009-08-26 | 2009-08-26 | 插件接入即时通讯程序的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101996095A CN101996095A (zh) | 2011-03-30 |
CN101996095B true CN101996095B (zh) | 2014-04-09 |
Family
ID=43786280
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200910168488.8A Expired - Fee Related CN101996095B (zh) | 2009-08-26 | 2009-08-26 | 插件接入即时通讯程序的方法和装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN101996095B (zh) |
HK (1) | HK1149817A1 (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102413115B (zh) * | 2011-08-12 | 2015-05-13 | 乐视网信息技术(北京)股份有限公司 | 一种客户端插件*** |
CN102546762A (zh) * | 2011-12-16 | 2012-07-04 | 深圳中兴网信科技有限公司 | 一种网页即时通讯***及方法 |
CN104021167B (zh) * | 2011-12-28 | 2017-06-16 | 北京奇虎科技有限公司 | 一种浏览网页的方法及装置 |
CN104021168B (zh) * | 2011-12-28 | 2017-06-16 | 北京奇虎科技有限公司 | 一种浏览网页的方法及装置 |
CN102915256B (zh) * | 2012-03-08 | 2015-02-18 | 北京金山安全软件有限公司 | 多核浏览器下的消息传递方法与装置 |
CN106874020B (zh) * | 2015-12-10 | 2021-02-02 | 五八同城信息技术有限公司 | 启动插件的方法及装置 |
CN107102880B (zh) | 2017-05-11 | 2018-11-23 | 腾讯科技(深圳)有限公司 | 消息处理方法、装置、存储介质和计算机设备 |
CN109697067A (zh) * | 2018-11-19 | 2019-04-30 | 北京奇虎科技有限公司 | 数据打包方法及装置 |
CN113176913B (zh) * | 2021-05-25 | 2023-03-24 | 深圳前海微众银行股份有限公司 | Java代理的处理方法、装置、终端设备以及存储介质 |
CN113656091B (zh) * | 2021-07-28 | 2024-06-21 | 广州虎牙科技有限公司 | 独立开播进程的实现方法以及相关装置、设备 |
CN114610403A (zh) * | 2022-01-24 | 2022-06-10 | 北京快确信息科技有限公司 | 一种跨进程的程序运行方法、装置、***及介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1629803A (zh) * | 2003-12-18 | 2005-06-22 | 腾讯科技(深圳)有限公司 | 在宿主程序界面中嵌入第三方界面的方法 |
CN101315609A (zh) * | 2007-05-31 | 2008-12-03 | 华为技术有限公司 | 实现单进程中组件间进行通信的装置和方法 |
-
2009
- 2009-08-26 CN CN200910168488.8A patent/CN101996095B/zh not_active Expired - Fee Related
-
2011
- 2011-04-19 HK HK11103960.7A patent/HK1149817A1/zh not_active IP Right Cessation
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1629803A (zh) * | 2003-12-18 | 2005-06-22 | 腾讯科技(深圳)有限公司 | 在宿主程序界面中嵌入第三方界面的方法 |
CN101315609A (zh) * | 2007-05-31 | 2008-12-03 | 华为技术有限公司 | 实现单进程中组件间进行通信的装置和方法 |
Also Published As
Publication number | Publication date |
---|---|
HK1149817A1 (zh) | 2011-10-14 |
CN101996095A (zh) | 2011-03-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101996095B (zh) | 插件接入即时通讯程序的方法和装置 | |
JP5936157B2 (ja) | 分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリングのためのシステム、方法、およびコンピュータ・プログラム(分散型バーチャル・マシンにおけるネイティブ・インタフェースのための隠された自動化データ・ミラーリング) | |
CN102498483B (zh) | 事件触发的服务器端宏 | |
CN112068936B (zh) | 一种工作流管理平台及工作流管理*** | |
CA2600503C (en) | Method and system for executing a container-managed application on a processing device | |
EP3504619B1 (en) | Apparatus and method for managing notification | |
CN109118160B (zh) | 一种信息共享方法、装置、终端设备和介质 | |
CN110830546A (zh) | 基于容器云平台的可用域建设方法、装置、设备 | |
CN109325195A (zh) | 浏览器的渲染方法和***、计算机设备、计算机存储介质 | |
US8561010B2 (en) | Software approval process using service governance | |
CN104838388A (zh) | 安全本地web应用数据管理器 | |
CN110287146B (zh) | 应用下载的方法、设备和计算机存储介质 | |
US8689243B2 (en) | Web service API for unified contact store | |
CN113254445B (zh) | 实时数据存储方法、装置、计算机设备及存储介质 | |
KR20100110823A (ko) | 애플리케이션 내의 프로세스에 의한 콘텐트의 격리 | |
CN114586005B (zh) | 用于在浏览器内托管另一浏览器的***和方法 | |
CN107704155A (zh) | 应用程序图标的展示方法、装置、终端和存储介质 | |
CN106980537A (zh) | 云计算环境中删除云主机的方法和*** | |
US9032326B2 (en) | Late instantiation of dependent objects | |
CN107657155B (zh) | 用于鉴定用户操作权限的方法和装置 | |
CN112581257A (zh) | 支持不同卡组织的争议业务管理方法、***、设备及介质 | |
CN115510508A (zh) | 页面信息的防护方法、装置及电子设备 | |
CN113781154A (zh) | 一种信息回滚方法、***、电子设备及存储介质 | |
CN114579004A (zh) | 流程画布的生成方法、装置和电子设备 | |
CN112613955A (zh) | 订单处理方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1149817 Country of ref document: HK |
|
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: GR Ref document number: 1149817 Country of ref document: HK |
|
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20140409 Termination date: 20190826 |
|
CF01 | Termination of patent right due to non-payment of annual fee |