发明内容
本申请的主要目的在于提出一种激活窗口审计方法、系统、电子装置及计算机可读存储介质,旨在解决如何有效对激活窗口变化进行审计,并降低对系统资源的消耗的问题。
为实现上述目的,本申请实施例提供了一种激活窗口审计方法,所述方法包括:
获取当前桌面的根窗口;
通过监听所述根窗口的属性变化判断当前激活窗口是否发生变化;
当所述当前激活窗口发生变化时,通过预设业务逻辑判断所述当前激活窗口是否合法;
当所述当前激活窗口不合法时,拦截所述当前激活窗口。
可选地,所述方法还包括:
记录对所述当前激活窗口的审计结果。
可选地,所述通过监听所述根窗口的属性变化判断当前激活窗口是否发生变化包括:
监听所述根窗口的属性变化;
当所述根窗口的属性发生变化时,判断发生变化的属性类型是否为指定类型;
当为指定类型时,确定所述当前激活窗口发生变化。
可选地,所述监听所述根窗口的属性变化包括:
接收监听新事件;
判断所述新事件是否为属性变化通知事件;
当所述新事件为属性变化通知事件时,确定所述根窗口的属性发生变化。
可选地,所述判断发生变化的属性类型是否为指定类型包括:
从所述属性变化通知事件中获取发生变化的属性类型;
比对所述属性类型是否为指定类型。
可选地,所述当所述当前激活窗口发生变化时,通过预设业务逻辑判断所述当前激活窗口是否合法包括:
从所述根窗口的发生变化的属性中读取所述当前激活窗口的信息;
读取预设的业务逻辑,并根据所述业务逻辑和所述当前激活窗口的信息判断所述当前激活窗口是否合法。
可选地,所述获取当前桌面的根窗口包括:通过X11服务的DefaultRootWindow函数获取当前桌面的根窗口。
可选地,所述监听所述根窗口的属性变化包括:基于X11服务监听所述根窗口的PropertyChangeMask和SubstructureNotifyMask属性变化。
可选地,所述属性变化通知事件为X11服务中的PropertyNotify事件,所述指定类型为_NET_ACTIVE_WINDOW属性。
可选地,所述拦截所述当前激活窗口包括:向所述当前激活窗口发送_NET_CLOSE_WINDOW消息,以关闭所述当前激活窗口。
此外,为实现上述目的,本申请实施例还提供一种激活窗口审计系统,所述系统包括:
获取模块,用于获取当前桌面的根窗口;
监听模块,用于通过监听所述根窗口的属性变化判断当前激活窗口是否发生变化;
判断模块,用于当所述当前激活窗口发生变化时,通过预设业务逻辑判断所述当前激活窗口是否合法;
拦截模块,用于当所述当前激活窗口不合法时,拦截所述当前激活窗口。
为实现上述目的,本申请实施例还提供一种电子装置,所述电子装置包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的激活窗口审计程序,所述激活窗口审计程序被所述处理器执行时实现如上述的激活窗口审计方法。
为实现上述目的,本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有激活窗口审计程序,所述激活窗口审计程序被处理器执行时实现如上述的激活窗口审计方法。
本申请实施例提出的激活窗口审计方法、系统、电子装置及计算机可读存储介质,能够基于X11服务直接获取当前激活窗口以及相关信息,并对不合法的窗口进行拦截,减少了系统资源的消耗,提升了系统运行效率和性能。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,在本申请实施例中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本申请要求的保护范围之内。
请参阅图1,图1为实现本申请各个实施例的一种应用环境架构图。本申请可应用于包括,但不仅限于显示端2和服务端4的应用环境中。
其中,显示端2用于通过一个或多个窗口向用户显示文件、网页等数据内容。所述显示端2可以是终端设备的显示器等。
服务端4用于针对所述显示端2中的激活窗口变化进行监测和控制。在本申请各个实施例中,所述服务端4基于X11服务为所述显示端2的桌面显示进行服务。
X11服务是一种X协议服务,所有的客户端都使用约定的X协议和X服务器进行通信,将需要显示的图像信息告知X服务器,其中包括窗口大小、位置、内容和属性等一系列信息。X服务器再将所有客户端的信息整合,将图像展示在显示端2上。
本申请各个实施例应用于特殊部门和组织或者特殊应用场景,需要对特定的网页或文件等内容进行管控。例如,在一些涉密场景中,假设一个涉密文件被禁止另存,当用户打开该涉密文件后,如果点击应用程序中的“另存为”按钮,执行另存为操作,则会弹出一个“另存为”窗口。此时本申请实施例可以监控到该涉密文件不允许另存,便会将该“另存为”窗口拦截,并生成审计日志,记录该非法操作,以便后续人员进行溯源。
当然,该应用环境中还可能包括输入端(可以用于输入激活窗口的操作,例如点击“另存为”按钮)等软硬件设备,在此不做赘述。
实施例一
如图2所示,为本申请第一实施例提出的一种激活窗口审计方法的流程示意图。可以理解,本方法实施例中的流程图不用于对执行步骤的顺序进行限定。根据需要,还可以对该流程图中的部分步骤进行添加或删减。下面以所述服务端4作为执行主体对该方法进行说明。
该方法包括以下步骤:
S20,获取当前桌面的根窗口。
具体地,在使用X11服务作为桌面显示服务器的系统中,可以使用X11服务的DefaultRootWindow函数获取当前桌面的根窗口(Root Window)。
S22,通过监听所述根窗口的属性变化判断当前激活窗口是否发生变化。
当获取所述根窗口后,可以通过对所述根窗口的监听,来感知当前激活窗口是否发生变化,从而对发生变化的激活窗口进行审计。
例如,当用户打开一个涉密文件后,如果点击应用程序中的“另存为”按钮,执行另存为操作,则会弹出一个“另存为”窗口。此时当前桌面的激活窗口变为所述“另存为”窗口,通过监听所述根窗口的属性变化,可以感知到所述激活窗口的变化。
具体而言,进一步参阅图3,为上述步骤S22的细化流程示意图。可以理解,该流程图不用于对执行步骤的顺序进行限定。根据需要,还可以对该流程图中的部分步骤进行添加或删减。在本实施例中,所述步骤S22具体包括:
S220,监听所述根窗口的属性变化。
具体地,当所述根窗口的某些属性发生变化时,可能表示当前桌面的激活窗口发生了变化。在本实施例中,可以基于X11服务监听所述根窗口的PropertyChangeMask和SubstructureNotifyMask属性变化。
具体而言,进一步参阅图4,为上述步骤S220的细化流程示意图。可以理解,该流程图不用于对执行步骤的顺序进行限定。根据需要,还可以对该流程图中的部分步骤进行添加或删减。在本实施例中,所述步骤S220具体包括:
S2200,接收监听新事件。
当监听所述根窗口的属性变化后,等待接收各种监听事件。
S2202,判断所述新事件是否为属性变化通知事件。
当接收到某个新事件后,首先判断所述新事件是否为属性变化通知事件。在本实施例中,所述属性变化通知事件为X11服务中的PropertyNotify事件。也就是说,首先判断所述新事件是否为PropertyNotify事件。
S2204,当所述新事件为属性变化通知事件时,确定所述根窗口的属性发生变化。
所述属性变化通知事件(PropertyNotify事件)用于通知此时所监听的属性(PropertyChangeMask和SubstructureNotifyMask属性)发生了变化。当判断所述新事件为PropertyNotify事件时,即可确定此时所述根窗口的属性发生变化。
S222,当所述根窗口的属性发生变化时,判断发生变化的属性类型是否为指定类型。
具体地,当所监听的属性发生变化时,会发出相应的通知事件,根据该通知事件,即可判断当前激活窗口是否发生变化。但是,由于所述属性变化可能包括多种类型,不一定是激活窗口变化导致所述属性变化,因此还需要进一步判断发生变化的属性类型是否为指定类型。
具体而言,进一步参阅图5,为上述步骤S222的细化流程示意图。可以理解,该流程图不用于对执行步骤的顺序进行限定。根据需要,还可以对该流程图中的部分步骤进行添加或删减。在本实施例中,所述步骤S222具体包括:
S2224,从所述属性变化通知事件中获取发生变化的属性类型。
由于属性变化的类型可能有很多种,不一定是激活窗口变化,因此还需要进行进一步的判断。所述属性变化通知事件(PropertyNotify事件)中一般都包含有发生变化的属性类型的信息(Property信息),从所述属性变化通知事件(PropertyNotify事件)直接可以获取到所述属性类型。
S2226,比对所述属性类型是否为指定类型。
根据所述属性类型与预先设置的指定类型进行比对,即可进一步确定是否为当前桌面的激活窗口发生变化。在本实施例中,所述指定类型为X11服务中的_NET_ACTIVE_WINDOW属性。也就是说,判断所述属性类型(PropertyNotify事件中的Property信息)是否为_NET_ACTIVE_WINDOW属性。
回到图3,S224,当为指定类型时,确定所述当前激活窗口发生变化。
具体地,在比对所述属性类型和所述指定类型后,若所述属性类型为所述指定类型,表示所述当前激活窗口发生变化。若所述属性类型不是所述指定类型,表示监听到的属性变化不是激活窗口变化,不需要理会。
回到图2,S24,当所述当前激活窗口发生变化时,通过预设业务逻辑判断所述当前激活窗口是否合法。
具体而言,进一步参阅图6,为上述步骤S24的细化流程示意图。可以理解,该流程图不用于对执行步骤的顺序进行限定。根据需要,还可以对该流程图中的部分步骤进行添加或删减。在本实施例中,所述步骤S24具体包括:
S240,从所述根窗口的所述发生变化的属性中读取所述当前激活窗口的信息。
为了判断所述当前激活窗口是否合法,首先要知道所述当前激活窗口是什么,也就是需要获取所述当前激活窗口的信息。在本实施例中,可以从所述根窗口的所述发生变化的属性(也就是所述指定类型的属性)中直接读取所述当前激活窗口的信息。例如,通过读取所述根窗口的_NET_ACTIVE_WINDOW属性,可以获取到当前激活窗口的窗口索引。
S242,读取预设的业务逻辑,并根据所述业务逻辑和所述当前激活窗口的信息判断所述当前激活窗口是否合法。
所述业务逻辑可以根据实际应用场景进行自定义配置。当监听后确定所述激活窗口发生变化,并获取到当前激活窗口的信息时,读取预先配置的所述业务逻辑,并根据所述业务逻辑对所述当前激活窗口进行相应逻辑运算,判断所述当前激活窗口是否合法。
例如,假设所述涉密文件被禁止另存,则当用户打开所述涉密文件并点击“另存为”按钮弹出一个“另存为”窗口后,此时本实施例可以监控到所述涉密文件不允许另存,因此可以判断出所述“另存为”窗口不合法。
回到图2,S26,当所述当前激活窗口不合法时,拦截所述当前激活窗口。
若根据所述业务逻辑判断出所述当前激活窗口不合法,则表示所述当前激活窗口不允许正常运行,应该进行拦截。在本实施例中,所述拦截是指向所述当前激活窗口发送_NET_CLOSE_WINDOW消息,以关闭所述当前激活窗口。
当然,若根据所述业务逻辑判断出所述当前激活窗口合法,则表示所述氮气激活窗口运行正常运行,不需要理会,不用采取额外操作。
本实施例提出的激活窗口审计方法,可以基于X11服务监听当前桌面根窗口的属性变化,根据发生变化的属性类型判断当前激活窗口是否发生变化,直接获取当前激活窗口以及相关信息,并在激活窗口变化时判断该激活窗口是否合法,以对不合法的激活窗口进行拦截,从而实现对所有激活窗口的审计,减少了系统资源的消耗,有效提升了系统运行的效率和性能。
实施例二
如图7所示,为本申请第二实施例提出的一种激活窗口审计方法的流程图。在第二实施例中,所述激活窗口审计方法在上述第一实施例的基础上,还包括步骤S38。可以理解,本方法实施例中的流程图不用于对执行步骤的顺序进行限定。根据需要,还可以对该流程图中的部分步骤进行添加或删减。
该方法包括以下步骤:
S30,获取当前桌面的根窗口。
具体地,在使用X11服务作为桌面显示服务器的系统中,可以使用X11服务的DefaultRootWindow函数获取当前桌面的根窗口(Root Window)。
S32,通过监听所述根窗口的属性变化判断当前激活窗口是否发生变化。
当获取所述根窗口后,可以通过对所述根窗口的监听,来感知当前激活窗口是否发生变化,从而对发生变化的激活窗口进行审计。
例如,当用户打开一个涉密文件后,如果点击应用程序中的“另存为”按钮,执行另存为操作,则会弹出一个“另存为”窗口。此时当前桌面的激活窗口变为所述“另存为”窗口,通过监听所述根窗口的属性变化,可以感知到所述激活窗口的变化。
具体地,当所述根窗口的某些属性发生变化时,可能表示当前桌面的激活窗口发生了变化。在本实施例中,可以基于X11服务监听所述根窗口的PropertyChangeMask和SubstructureNotifyMask属性变化。
当所监听的属性发生变化时,会发出相应的通知事件,在本实施例中,所述属性变化通知事件为X11服务中的PropertyNotify事件。但是,由于所述属性变化可能包括多种类型,不一定是激活窗口变化导致所述属性变化,因此还需要进一步判断发生变化的属性类型是否为指定类型。所述指定类型为X11服务中的_NET_ACTIVE_WINDOW属性。若所述属性类型为所述指定类型,表示所述激活窗口发生变化。若所述属性类型不是所述指定类型,表示监听到的属性变化不是激活窗口变化,不需要理会。
该步骤的具体过程参阅所述第一实施例的相关说明,在此不再赘述。
S34,当所述当前激活窗口发生变化时,通过预设业务逻辑判断所述当前激活窗口是否合法。
为了判断所述当前激活窗口是否合法,首先要知道所述当前激活窗口是什么,也就是需要获取所述当前激活窗口的信息。在本实施例中,可以从所述根窗口的所述发生变化的属性(也就是所述指定类型的属性)中直接读取所述当前激活窗口的信息。例如,通过读取所述根窗口的_NET_ACTIVE_WINDOW属性,可以获取到当前激活窗口的窗口索引。
所述业务逻辑可以根据实际应用场景进行自定义配置。当监听后确定所述激活窗口发生变化,并获取到当前激活窗口的信息时,读取预先配置的所述业务逻辑,并根据所述业务逻辑对所述当前激活窗口进行相应逻辑运算,判断所述当前激活窗口是否合法。
例如,假设所述涉密文件被禁止另存,则当用户打开所述涉密文件并点击“另存为”按钮弹出一个“另存为”窗口后,此时本实施例可以监控到所述涉密文件不允许另存,因此可以判断出所述“另存为”窗口不合法。
S36,当所述当前激活窗口不合法时,拦截所述当前激活窗口。
若根据所述业务逻辑判断出所述当前激活窗口不合法,则表示所述当前激活窗口不允许正常运行,应该进行拦截。在本实施例中,所述拦截是指向所述当前激活窗口发送_NET_CLOSE_WINDOW消息,以关闭所述当前激活窗口。
当然,若根据所述业务逻辑判断出所述当前激活窗口合法,则表示所述氮气激活窗口运行正常运行,不需要理会,不用采取额外操作。
S38,记录对所述当前激活窗口的审计结果。
在当前桌面的激活窗口发生变化后,本实施例通过上述过程对所述激活窗口进行了审计,审计结果可以是允许运行所述激活窗口或者拦截。将所述审计结果记录下来形成审计日志,可以方便后期溯源。
如图8所示,为本实施例的一种具体实例的流程示意图。
为了更详尽的对该方法的上述各步骤进行解释说明,以下以特定的具体实施例为例进行说明。本领域技术人员当知,下述具体实施例的内容并不用于限制本发明的发明思想,本领域技术人员可以轻易依据下述实施例具体描述内容进行适当的内容发散和扩展。
S400,通过DefaultRootWindow获取当前桌面的根窗口。
S402,监听根窗口的PropertyChangeMask和SubstructureNotifyMask属性变化。
S404,等待监听事件发生。
S406,判断新事件是否为PropertyNotify。当所述新事件为PropertyNotify时,执行步骤S408;当所述新事件不是PropertyNotify时,返回步骤S404继续等待下一个新事件。
S408,判断发生变化的属性(Property)是否为_NET_ACTIVE_WINDOW。若是,则执行步骤S410,否则返回步骤S404继续等待下一个新事件。
S410,读取根窗口的_NET_ACTIVE_WINDOW获取当前激活窗口信息。
S412,判断所述当前激活窗口是否合法。若不合法,则执行步骤S414-S416。若合法,则直接执行步骤S416。
S414,向所述当前激活窗口发送_NET_CLOSE_WINDOW,关闭该窗口。
S416,记录对所述当前激活窗口的审计结果。
本实施例提出的激活窗口审计方法,可以基于X11服务监听当前桌面根窗口的属性变化,根据发生变化的属性类型判断当前激活窗口是否发生变化,直接获取当前激活窗口以及相关信息,并在激活窗口变化时判断该激活窗口是否合法,以对不合法的激活窗口进行拦截,从而实现对所有激活窗口的审计,减少了系统资源的消耗,有效提升了系统运行的效率和性能。另外,及时记录对所述当前激活窗口的审计结果,形成审计日志,可以方便后期溯源。
实施例三
如图9所示,为本申请第三实施例提出一种电子装置20的硬件架构示意图。本实施例中,所述电子装置20可包括,但不仅限于,可通过系统总线相互通信连接的存储器21、处理器22、网络接口23。需要指出的是,图9仅示出了具有组件21-23的电子装置20,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。在本实施例中,所述电子装置20可以是所述服务端4。
所述存储器21至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,所述存储器21可以是所述电子装置20的内部存储单元,例如该电子装置20的硬盘或内存。在另一些实施例中,所述存储器21也可以是所述电子装置20的外部存储设备,例如该电子装置20上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,所述存储器21还可以既包括所述电子装置20的内部存储单元也包括其外部存储设备。本实施例中,所述存储器21通常用于存储安装于所述电子装置20的操作系统和各类应用软件,例如激活窗口审计系统60的程序代码等。此外,所述存储器21还可以用于暂时地存储已经输出或者将要输出的各类数据。
所述处理器22在一些实施例中可以是CPU、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器22通常用于控制所述电子装置20的总体操作。本实施例中,所述处理器22用于运行所述存储器21中存储的程序代码或者处理数据,例如运行所述激活窗口审计系统60等。
所述网络接口23可包括无线网络接口或有线网络接口,该网络接口23通常用于在所述电子装置20与其他电子设备之间建立通信连接。
实施例四
如图10所示,为本申请第四实施例提出一种激活窗口审计系统60的模块示意图。所述激活窗口审计系统60可以被分割成一个或多个程序模块,一个或者多个程序模块被存储于存储介质中,并由一个或多个处理器所执行,以完成本申请实施例。本申请实施例所称的程序模块是指能够完成特定功能的一系列计算机程序指令段,以下描述将具体介绍本实施例各程序模块的功能。
在本实施例中,所述激活窗口审计系统60包括:
获取模块600,用于获取当前桌面的根窗口。
具体地,在使用X11服务作为桌面显示服务器的系统中,可以使用X11服务的DefaultRootWindow函数获取当前桌面的根窗口(Root Window)。
监听模块602,用于通过监听所述根窗口的属性变化判断当前激活窗口是否发生变化。
当获取所述根窗口后,可以通过对所述根窗口的监听,来感知当前激活窗口是否发生变化,从而对发生变化的激活窗口进行审计。
例如,当用户打开一个涉密文件后,如果点击应用程序中的“另存为”按钮,执行另存为操作,则会弹出一个“另存为”窗口。此时当前桌面的激活窗口变为所述“另存为”窗口,通过监听所述根窗口的属性变化,可以感知到所述激活窗口的变化。
具体地,当所述根窗口的某些属性发生变化时,可能表示当前桌面的激活窗口发生了变化。在本实施例中,可以基于X11服务监听所述根窗口的PropertyChangeMask和SubstructureNotifyMask属性变化。
当所监听的属性发生变化时,会发出相应的通知事件,在本实施例中,所述属性变化通知事件为X11服务中的PropertyNotify事件。但是,由于所述属性变化可能包括多种类型,不一定是激活窗口变化导致所述属性变化,因此还需要进一步判断发生变化的属性类型是否为指定类型。所述指定类型为X11服务中的_NET_ACTIVE_WINDOW属性。若所述属性类型为所述指定类型,表示所述激活窗口发生变化。若所述属性类型不是所述指定类型,表示监听到的属性变化不是激活窗口变化,不需要理会。
上述过程参阅所述第一实施例的具体说明,在此不再赘述。
判断模块604,用于当所述当前激活窗口发生变化时,通过预设业务逻辑判断所述当前激活窗口是否合法。
为了判断所述当前激活窗口是否合法,首先要知道所述当前激活窗口是什么,也就是需要获取所述当前激活窗口的信息。在本实施例中,可以从所述根窗口的所述发生变化的属性(也就是所述指定类型的属性)中直接读取所述当前激活窗口的信息。例如,通过读取所述根窗口的_NET_ACTIVE_WINDOW属性,可以获取到当前激活窗口的窗口索引。
所述业务逻辑可以根据实际应用场景进行自定义配置。当监听后确定所述激活窗口发生变化,并获取到当前激活窗口的信息时,读取预先配置的所述业务逻辑,并根据所述业务逻辑对所述当前激活窗口进行相应逻辑运算,判断所述当前激活窗口是否合法。
例如,假设所述涉密文件被禁止另存,则当用户打开所述涉密文件并点击“另存为”按钮弹出一个“另存为”窗口后,此时本实施例可以监控到所述涉密文件不允许另存,因此可以判断出所述“另存为”窗口不合法。
拦截模块606,用于当所述当前激活窗口不合法时,拦截所述当前激活窗口。
若根据所述业务逻辑判断出所述当前激活窗口不合法,则表示所述当前激活窗口不允许正常运行,应该进行拦截。在本实施例中,所述拦截是指向所述当前激活窗口发送_NET_CLOSE_WINDOW消息,以关闭所述当前激活窗口。
当然,若根据所述业务逻辑判断出所述当前激活窗口合法,则表示所述氮气激活窗口运行正常运行,不需要理会,不用采取额外操作。
本实施例提出的激活窗口审计系统,可以基于X11服务监听当前桌面根窗口的属性变化,根据发生变化的属性类型判断当前激活窗口是否发生变化,直接获取当前激活窗口以及相关信息,并在激活窗口变化时判断该激活窗口是否合法,以对不合法的激活窗口进行拦截,从而实现对所有激活窗口的审计,减少了系统资源的消耗,有效提升了系统运行的效率和性能。
实施例五
如图11所示,为本申请第五实施例提出一种激活窗口审计系统60的模块示意图。在本实施例中,所述激活窗口审计系统60除了包括第四实施例中的所述获取模块600、监听模块602、判断模块604、拦截模块606之外,还包括记录模块608。
所述记录模块608,用于记录对所述当前激活窗口的审计结果。
在当前桌面的激活窗口发生变化后,本实施例通过上述过程对所述激活窗口进行了审计,审计结果可以是允许运行所述激活窗口或者拦截。将所述审计结果记录下来形成审计日志,可以方便后期溯源。
实施例六
本申请还提供了另一种实施方式,即提供一种计算机可读存储介质,所述计算机可读存储介质存储有激活窗口审计程序,所述激活窗口审计程序可被至少一个处理器执行,以使所述至少一个处理器执行如上述的激活窗口审计方法的步骤。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
显然,本领域的技术人员应该明白,上述的本申请实施例的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请实施例不限制于任何特定的硬件和软件结合。
以上仅为本申请实施例的优选实施例,并非因此限制本申请实施例的专利范围,凡是利用本申请实施例说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请实施例的专利保护范围内。