发明内容
本发明提供了一种用于文件收集的方法和装置,能够更全面、更高效的收集文件。本发明还提供了一种用于实现软件包自动安装的方法和装置,能够提高软件包的安装效率,并且可以适用于不同类型软件包的自动安装。
本发明提供了如下方案:
一种用于实现文件收集的方法,包括:获得可安装的软件包;运行所述可安装的软件包;当出现所述软件包的安装界面时分析所述安装界面的内容,获得所述安装界面中继续安装类按键的位置信息;根据所述继续安装类按键的位置信息,模拟点击所述继续安装类按键,直至所述软件包的安装完成为止;监控所述软件包安装过程中释放的文件;收集在所述软件包的安装过程中释放的所需的文件。
可选的,所述获得所述安装界面中继续安装类按键的位置信息包括:调用用以枚举界面上控件类型的系统API函数,查找当前安装界面上按键类型的控件;分析所述按键类型的控件的文本内容,找出所述文本内容属于继续安装类的按键;通过调用用以获取位置信息的系统API函数,获得所述继续安装类按键的位置信息。
可选的,所述获得所述安装界面中继续安装类按键的位置信息包括:调用用以枚举界面上控件类型的系统API函数,查找当前安装界面上按键类型的控件;调用用以查找按键不可用的系统API函数,找出所述控件中不可点击的按键类型的控件;分析所述按键类型的控件的文本内容,找出所述文本内容属于停止安装类的按键;通过在所有的按键中过滤掉不可点击的按键和所述停止安装类的按键,找出继续安装类的按键和后退安装类的按键;根据所述继续安装类的按键和后退安装类的按键之间的位置关系,或者通过模拟试点击的方式,找出继续安装类的按键;通过调用用以获取位置信息的系统API函数,获得所述继续安装类按键的位置信息。
可选的,所述监控所述软件包安装过程中释放出的文件包括:通过调用钩子函数捕获到文件操作流,获得在所述软件包安装过程中释放的文件的文件路径;所述收集在软件包的安装过程中释放的所需的文件包括:根据所述文件的文件路径,收集在所述软件包的安装过程中释放的所需的文件。
可选的,所述收集所需的文件包括:从所述软件包安装过程中释放的文件中识别出属于可移植的执行体PE类文件和/或脚本类文件;拷贝所述PE类文件和/或脚本类文件;通过调用系统API函数获得所述PE类文件和/或脚本类文件的文件属性信息。
可选的,所述获得PE类文件和/或脚本类文件的文件属性信息包括:获得所述PE类文件和/或脚本类文件的大小、创建时间、修改时间、文件签名中的任意一种或多种。
可选的,所述模拟点击包括模拟鼠标点击、模拟键盘点击和模拟触摸点击中的任意一种。
一种用于实现文件收集的装置,包括:软件包获得单元,用于获得可安装的软件包;运行单元,用于运行所述可安装的软件包;位置分析单元,用于当出现所述软件包的安装界面时分析所述安装界面的内容,获得所述安装界面中继续安装类按键的位置信息;模拟点击单元,用于根据所述继续安装类按键的位置信息,模拟点击所述继续安装类按键,直至所述软件包的安装完成为止;监控单元,用于监控所述软件包安装过程中释放的文件;收集单元,用于收集在所述软件包的安装过程中释放的所需的文件。
可选的,所述位置分析单元包括:第一查找单元,用于调用用以枚举界面上控件类型的系统API函数,查找当前安装界面上按键类型的控件;第一分析单元,用于分析所述按键类型的控件的文本内容,找出所述文本内容属于继续安装类的按键;第一位置获得单元,用于通过调用用以获取位置信息的系统API函数,获得所述继续安装类按键的位置信息。
可选的,所述位置分析单元包括:第二查找单元,用于调用用以枚举界面上控件类型的系统API函数,查找当前安装界面上按键类型的控件;第三查找单元,用于调用用以查找按键不可用的系统API函数,找出所述控件中不可点击的按键类型的控件;第二分析单元,用于分析所述按键类型的控件的文本内容,找出所述文本内容属于停止安装类的按键;过滤单元,用于通过在所有的按键中过滤掉不可点击的按键和所述停止安装类的按键,找出继续安装类的按键和后退安装类的按键;第四查找单元,用于根据所述继续安装类的按键和后退安装类的按键之间的位置关系,或者通过模拟试点击的方式,找出继续安装类的按键;第二位置获得单元,用于通过调用用以获取位置信息的系统API函数,获得所述继续安装类按键的位置信息。
可选的,所述监控单元,具体用于通过调用钩子函数捕获到文件操作流,获得在所述软件包安装过程中释放的文件的文件路径;所述收集单元,具体用于根据所述监控单元提供的文件路径,收集在所述软件包的安装过程中释放的所需的文件。
可选的,所述收集单元具体包括:识别子单元,用于从所述软件包安装过程中释放的文件中识别出属于PE类的文件和/或脚本类的文件;拷贝子单元,用于拷贝所述PE类文件和/或脚本类文件;属性获得子单元,用于通过调用系统API函数获得所述PE类文件和/或脚本类文件的文件属性信息。
可选的,所述属性获得子单元,具体用于获得所述PE类文件和/或脚本类文件的大小、创建时间、修改时间、文件签名中的任意一种或多种。
一种用于实现软件包自动安装的方法,包括:获得可安装的软件包;运行所述可安装的软件包;当出现所述软件包的安装界面时分析所述安装界面的内容,获得所述安装界面中继续安装类按键的位置信息;根据所述继续安装类按键的位置信息,模拟点击所述继续安装类按键,直至所述软件包的安装完成为止。
可选的,还包括:根据继续安装类按键在上一安装界面中所处的位置信息,在当前安装界面中的雷同位置识别出所述当前安装界面中继续安装类按键的位置信息。
可选的,还包括:分析当前安装界面中是否包含协议类型的控件,识别出当前安装界面为协议页;如果当前协议页中的继续安装类按键不可点击,则获取协议同意类型控件的按键位置信息;模拟点击所述协议同意类型控件的按键,直到所述继续安装类按键可以点击为止。
可选的,还包括:分析当前安装界面中是否包含组件类型的控件,识别出当前安装界面为组件页;模拟点击所述组件页中所有组件类型控件的按键。
可选的,还包括:将当前弹出的弹出框尺寸与所述安装界面尺寸比较,如果所述弹出框的尺寸小于所述安装界面的尺寸或小于所述安装界面的程度超过预置范围,则识别所述弹出框为提示框;举所述提示框中控件类型的系统API函数,查找所述提示框中按键类型的控件;在所述按键类型的控件中识别出确认类按键;通过调用用以获得位置信息的系统API函数,获得所述提示框中确认类按键的位置信息;模拟点击所述提示框中的确认类按键。
一种用于实现软件包自动安装的装置,包括:软件包获得单元,用于获得可安装的软件包;运行单元,用于运行所述可安装的软件包;第一位置分析单元,用于当出现所述软件包的安装界面时分析所述安装界面的内容,获得所述安装界面中继续安装类按键的位置信息;第一模拟点击单元,用于根据所述继续安装类按键的位置信息,模拟点击所述继续安装类按键,直至所述软件包的安装完成为止。
可选的,还包括:第二位置分析单元,用于根据继续安装类按键在上一安装界面中所处的位置信息,在当前安装界面中的雷同位置识别出所述当前安装界面中继续安装类按键的位置信息。
可选的,还包括:协议页识别单元,用于分析当前安装界面中是否包含协议类型的控件,识别出当前安装界面为协议页;第三位置分析单元,用于如果当前协议页中的继续安装类按键不可点击,则获取协议同意类型控件的按键位置信息;第二模拟点击单元,用于模拟点击所述协议同意类型控件的按键,直到所述继续安装类按键可以点击为止。
可选的,还包括:组件识别单元,用于分析当前安装界面中是否包含组件类型的控件,识别出当前安装界面为组件页;第三模拟点击单元,用于模拟点击所述组件页中所有组件类型控件的按键。
可选的,还包括:提示框识别单元,用于将当前弹出的弹出框尺寸与所述安装界面尺寸比较,如果所述弹出框的尺寸小于所述安装界面的尺寸或小于所述安装界面的程度超过预置范围,则识别所述弹出框为提示框;第五查找单元,用于枚举所述提示框中控件类型的系统API函数,查找所述提示框中按键类型的控件;确认识别单元,用于在所述按键类型的控件中识别出确认类按键;第四位置分析单元,用于通过调用用以获得位置信息的系统API函数,获得所述提示框中确认类按键的位置信息;第四模拟点击单元,用于模拟点击所述提示框中的确认类按键。
可选的,所述模拟点击单元包括模拟鼠标点击、模拟键盘点击和模拟触摸点击中的任意一种。
根据本发明提供的一种用于实现文件收集的方法和装置具体实施例,本发明公开了以下技术效果:通过自动安装软件包的方式来收集安装过程中释放出的文件,使得收集到的文件更全面。而且,由于在进行安装过程中,是通过分析安装界面的内容,能够自动识别出需要点击的按键(比如继续安装类的按键),并且在识别之后通过模拟点击对应的按键,实现软件包的完全自动安装。因此,安装软件包的效率很高,而且对软件包的类型没有限制,适用性更广,所以使得文件收集的效率和全面性都得到了显著提高。
根据本发明提供的一种用于实现软件包自动安装的方法和装置实施例,本发明公开了以下技术效果:通过分析安装界面的内容,能够自动识别出需要点击的按键(比如继续安装类的按键),并且在识别之后通过模拟点击对应的按键,实现软件包的完全自动安装。而且,本发明实施例不需要事先对待安装的软件包类型进行识别分析、安装录制,而是通过在安装过程中对安装界面进行具体分析找出需要模拟点击的按键,从使得本发明实施例的软件包自动安装方案,可以适用于各种类型软件包的安装,因此应用范围更广,自动安装的效率更高。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1,其为本发明一种用于实现文件收集的方法第一实施例流程图。在本实施例中,包括如下步骤:
步骤110:获得可安装的软件包。
在具体实现本步骤的过程中,有多种具体实施方式。比如,可以由服务器通过软件收集或人工收集当前网络上提供的下载可安装的软件包的链接,然后由服务器自动下载或者人工手动下载可安装的软件包。再比如,监控到某台计算机上有需要更新的软件,那么可以去下载该软件的升级包。可安装的软件包可以是升级的软件包,也可以是全新的一款可安装的软件包。本发明实施例对如何获得可安装的软件包并没有限制,只要能够获取到可安装的软件包,即可应用本发明实施例的技术方案。
步骤120:运行所述可安装的软件包。
在具体实现时,可以通过点击来运行可安装的软件包。也可以通过调用系统API函数creat process,自动运行可安装的软件包,以便达到自动运行的效果。
步骤130:当出现所述软件包的安装界面时分析所述安装界面的内容,获得所述安装界面中继续安装类按键的位置信息。
在运行可安装的软件包之后,会出现各种安装界面。进而,就需要对安装界面进行分析,通过分析安装界面的内容,获得安装界面中继续安装类按键的位置信息。本发明实施例中所述的继续安装类按键,包括但不限于“继续安装”、“继续”、“下一步”、“next”、“→”等,只要表示要将安装操作继续的按键都属于本发明实施例中的继续安装类按键。获得继续安装类按键的位置信息的具体实现方式有多种,下面仅给出几种具体实现方式的示例。
(一)获得继续安装类按键的位置信息的第一具体实现方式:
A:调用用以枚举界面上控件类型的系统API函数,查找当前安装界面上按键类型的控件;B:分析所述按键类型的控件的文本内容,找出所述文本内容属于继续安装类的按键;C:通过调用用以获取位置信息的系统API函数,获得所述继续安装类按键的位置信息。具体而言,对于不同的操作系统,调用的API函数不尽相同,以windows为例,可以调用EnumChildWindows这个Windows API枚举安装界面上的控件类型和控件值,控件类型多种多样,比如Static、各种Button、TRzBitBtn等等。其中,如果控件类型为“Button、TButton、TNewButton、TTntButton.UnicodeClass、obj_BUTTON、TRzBitBtn”等类型,则表明该控件是按键类型。在找出按键类型的控件后,就可以分析这些控件的文本内容,比如分析出其中哪些按键上的文本内容属于继续安装类的文本,比如文本内容是“继续安装”、“继续”、“下一步”等等,于是就找到本文内容属于继续安装类的按键。最后,通过调用可以获得控件位置信息的API函数获得继续安装类按键的位置信息,如用API函数FindWindow和FindWindowEx找到控件句柄后,再用GetWindowRect获取到控件的位置等所需信息。
(二)获得继续安装类按键的位置信息的第二具体实施方式:
A:调用用以枚举界面上控件类型的系统API函数,查找当前安装界面上按键类型的控件;B:调用用以查找按键不可用的系统API函数,找出所述控件中不可点击的按键类型的控件;C:分析所述按键类型的控件的文本内容,找出所述文本内容属于停止安装类的按键;D:通过在所有的按键中过滤掉不可点击的按键和所述停止安装类的按键,找出继续安装类的按键和后退安装类的按键;E:根据所述继续安装类的按键和后退安装类的按键之间的位置关系,或者通过模拟试点击的方式,找出继续安装类的按键;F:通过调用用以获取位置信息的系统API函数,获得所述继续安装类按键的位置信息。具体言之,第二具体实施方式中的步骤A和第一具体实施方式中的步骤A一样,所以不再赘述。在本实施方式中的步骤B,在Windows下,可以通过IsWindowEnabled这个Windows API判断按键控件是否可用,即是否可点击,从而找出不可点击的按键。本实施方式中的步骤C与前文第一实施方式中的步骤C使用的技术原理一样,只不过查找的不是继续安装类的按键,而是查找停止安装类的按键,比如按键的文本内容是“取消”、“cancel”、“停止安装”等代表不再继续安装、停止安装的意思。之所以本步骤如此操作,是因为通常继续安装类按键的文本表示内容多种多样,可能无法穷尽,而停止安装类按键的文本表示内容相对比较固定、种类较少,因此,可以通过排除法,先找出停止类按键,然后再一步步排除。找出不可点击的按键和停止类按键之后,剩余的基本就是继续安装类的按键和后退安装类按键。通常后退安装类按键和继续安装类按键之间有比较固定的位置关系,比如,继续安装类按键通常在后退安装类按键的右侧,于是就可以确定右侧的按键是继续安装类的按键。或者,也可以通过试点击的方式来确定哪个是继续安装类按键,比如,保存上一安装界面,模拟试点击继续安装类按键和后退安装类按键中的某一个,试点击之后,将新出现的安装界面与已保存的上一安装界面对比,如果两个界面一样,说明试点击的按键是后退安装类按键,反之,则说明试点击的按键是继续安装类的按键。步骤F中获取继续安装类按键的位置信息的具体实现与第一实施方式中的步骤C一样,不再赘述。
需要说明的是,虽然第二种具体实施方式获得位置信息的方式较第一具体实施方式复杂,但是通用性相对更强,所以各有优势,可以在不同实际情况下单独使用,也可以将两者结合使用。比如,可以在通过第一具体实施方式无法找出继续安装类按键的情况下,再采用第二种具体实施方式进行查找。
(三)获得继续安装类按键的位置信息的第三具体实施方式:
在通过某种方式已经获得某软件包安装过程中的一安装界面的继续安装类按键的位置信息,那可以通过下述方式获得该软件包后续安装界面上继续安装类按键的位置信息:根据继续安装类按键在上一安装界面中所处的位置信息,在当前安装界面中的雷同位置识别出所述当前安装界面中继续安装类按键的位置信息。一般而言,针对同一软件包而言,各安装界面上继续安装类按键在界面上的位置都是相对固定的,因此,可以根据继续安装类按键在上一安装界面中的所处位置,判断出下一安装界面中继续安装类按键的位置。
步骤140:根据所述继续安装类按键的位置信息,模拟点击所述继续安装类按键,直至所述软件包的安装完成为止。
模拟点击的具体实现方式很多,比如可以采用模拟鼠标点击的方式,也可以采用模拟键盘点击的方式,还可以采用模拟触摸点击的方式。比如,模拟鼠标点击而言,可以通过发送消息来实现,主要是通过SendMessage和PostMessage来实现,如下所示:SendMessage(hWnd,WM_COMMAND,MAKELPARAM(BN_CLICK,ID),hButtonWnd)。再比如,还可以首先需要通过SetCursorPos函数来设置需要单击的位置坐标,然后通过mouse_event等函数(包括MOUSEEVENTF_LEFTDOWN、MOUSEEVENTF_LEFTUP、MOUSEEVENTF_MOVE等多种参数)模拟在对应的位置按下、释放、移动等操作,从而达到模拟点击的效果。采用模拟键盘点击的具体实现与采用模拟鼠标点击的方案类似,只是在选中按键后将SendMessage和PostMessage中鼠标点击的参数替换为键盘点击的参数(比如替换为回车的参数),此处不再赘述。模拟触摸点击的方式,也是类似的,也可以通过SendMessage和PostMessage来实现。当然,还有很多其他的模拟点击方式,此处不再赘述,任何可以实现模拟点击的技术实现方式都可以应用在本发明实施例中。此外,此处介绍的模拟点击方式,不限于模拟点击继续安装类按键,还适用于模拟点击其他按键,也适用于本发明实施例中其他需要模拟点击的技术点,因为实现原理一样,故其他涉及模拟点击的部分不再赘述,请参看此处描述。
软件包的安装过程一般会涉及多个安装界面,也就是需要模拟点击多个继续安装类按键,才能最终完成安装过程,所以可以重复查找继续安装类按键以及模拟点击的步骤,直到安装完成为止。一般通过界面上的信息可以自动判断安装是否完成,比如,如果界面中有控件类型为ctrl1且值包含value1的控件,且有控件类型为ctrl2且值为value2的控件(例如可简写成规则<rulevalue="ctr11value1ctr12value2"/>),则被认为该软件成功安装。其他可以判断安装已完成的方式也应该应用到本发明实施例中,比如采用分析界面中按键文本内容的方式,如果分析出有“完成”、“安装完成”等表述安装完成类的文字,则也可证明安装完成,点击安装完成类的按键结束整个安装过程。
通过以上各步骤就可以完成多数软件的自动安装。不过由于软件包的差异化,在有些软件包的安装过程中,可能除了出现包括继续安装类按键的常规安装界面之外,还可能会出现其他的安装界面,比如协议页、组件页,或者提示框等,或者出现解压缩、环境准备过程或者语言选择等非必然出现的各种情况,下面对可能出现的这几种情况进行详细说明。本领域技术人员可以理解,如果没有出现上述这几种特殊的情况,则不需要相关操作。
(1)介绍如何处理软件包安装过程中可能出现的协议页。
在具体实现时,分析当前安装界面中是否包含协议类型的控件,识别出当前安装界面为协议页;如果当前协议页中的继续安装类按键不可点击,则获取协议同意类型控件的按键位置信息;模拟点击所述协议同意类型控件的按键,直到所述继续安装类按键可以点击为止。比如,以windows为例,可以调用EnumChildWindows这个Windows API枚举安装界面上的控件类型和控件值,控件类型多种多样,比如Static、各种Button、TRzBitBtn等等。如果出现类型为RadioButton、TNewRadioButton、TRadioButton、TTntRadioButton.UnicodeClass、TCheckBox等控件时,就认为是协议页中“同意”或“不同意”对应的控件,进而,就可以识别出当前安装界面是协议页。通常而言,在协议页中,如果当前选默认选中的是“不同意”,那么该安装界面中继续安装类按键是不可点击的。
所以,可以先通过前文所述的多种方式查找到当前安装界面中的继续安装类按键,并判断该按键是否可以点击,如果不可点击,则获得“同意”和“不同意”两个按键的位置信息,通过模拟点击的方式尝试点击其中的任一按键,如果点击后发现该安装界面中继续安装类按键还是不可点击,那么证明当前尝试点击(选中)的是“不同意”,于是再点击另外一个按键,会发现该界面中继续安装类按键点击了,于是也说明当前选中点击的按键是协议“同意按键”。反之,如果初次尝试模拟点击一按键后,继续安装类按键可以点击了,那么就证明初次尝试模拟点击的是协议“同意”按键。当然,还可以分析当前安装界面中的文本内容,找到“同意”或“不同意”的文本内容,从而确定哪个按键是“同意”对应的控件,进而获得该按键的位置信息,通过模拟点击“同意”的按键控件,以便继续安装类按键可以点击。在继续安装类按键可以点击后,就可以通过步骤140模拟点击该类按键,逐步完成软件的安装。
(2)介绍如何处理软件包安装过程中可能出现的组件页。
分析当前安装界面中是否包含组件类型的控件,识别出当前安装界面为组件页;模拟点击所述组件页中所有组件类型控件的按键。与前述识别协议页的实现方案类似,调用EnumChildWindows这个Windows API枚举安装界面上的控件类型和控件值,如果出现类型为“TNewCheckListBox、CheckListBox”等组件类型的控件,则认为当前安装页是组件页。进而,通过模拟点击的方式将控件中可点击的组件选中。优选的,由于不同组件会释放不同的文件,因此优选,为了在安装过程使得要收集的文件更全面,可以将所有要可选择的组件都选中。同理,在选择好组件后,模拟点击当前安装页面中的继续安装类按键即可进入下一个安装界面。
(3)介绍如何处理软件包安装过程中可能出现的提示框。
具体而言,在软件安装过程中可能出现因各种原因出现的各种提示框,比如提示“文件夹已存在”、“是否确实要安装”等等提示框,虽然提示框的种类繁多,但通常无论是因何种原因出现何种提示框,一般提示框中可点击的按键只有两类,一类是确认类按键,如“确认”、“OK”等;另一类是取消类按键,如“取消”、“cancel”等等。因此可以通过下述方式自动处理提示框。
比如,将当前弹出的弹出框尺寸与所述安装界面尺寸比较,如果弹出框的尺寸小于安装界面的尺寸,则识别该弹出框为提示框。可选的,为了防止不同安装界面尺寸之间存在微小误差,可以考虑当弹出框的尺寸小于所述安装界面的程度超过预置范围时,才将其识别为提示框,否则还认为是安装界面。比如可以设定如果当前弹出框的尺寸小于安装界面尺寸的几分之几时,就确定当天的弹出框是提示框,至于预置的范围具体是多少,以及设置为长度、宽度,还是面积,则可以根据具体实际情况而定,本发明对此并没有限制。然后调用用以枚举提示框中控件类型的系统API函数,查找所述提示框中按键类型的控件;在所述按键类型的控件中识别出确认类按键;通过调用用以获得位置信息的系统API函数,获得所述提示框中确认类按键的位置信息;模拟点击所述提示框中的确认类按键。
与识别安装界面中的继续安装类按键的具体实现类似,识别出确认类按键的方式也有多种。比如可以分析所述按键类型的控件的文本内容,获得所述文本内容属于确认类的按键;或者,分析所述按键类型的控件的文本内容,获得所述文本内容属于取消类的按键,从所述提示框的按键中过滤取消类按键,得到确认类按键。其余步骤的具体实现也与前述继续安装类按键的相关步骤实现雷同,故不再赘述。
(4)介绍如何处理需要解压缩的软件包、环境准备过程、正在安装过程或者语言选择等可能出现的情况。
有些可安装的软件包在下载时是压缩包,因此需要进行解压缩。多数情况下运行软件包时会自动识别压缩格式,进而通过对应的解压工具进行解压。解压过程中,在安装界面上一般会出现进度条的控件,因此可以通过分析当前安装界面中是否存在进度条类型的控件,来判断当前是否处于解压状态。可选的,为了处理个别情况下因无法正确解压而造成不能正常安装,可以设置一超时机制,当超过预设时间解压进度条仍然没有消失,则停止安装,即模拟点击当然安装界面上的停止安装类按键。
在安装过程中可能会出现包括语言选择的安装界面,通过分析安装界面上的文字信息可以识别出语言选择界面,比如界面上有“语言”或“language”等内容,则确认当前安装界面是语言选择界面,通常情况下,选择按照默认选项即可,然后模拟点击该安装界面上的继续安装类按键。
此外,在安装过程中还可能出现处于环境准备过程的阶段,这个阶段对安装基本没有影响,在该阶段,安装界面中的继续安装类按键一般是灰的,即无法点击状态,只有环境准备过程结束后,继续安装类按键才可以点击,进而通过模拟点击继续安装类按键即可进入下一安装界面。
此外,在软件安装过程中还可能会出现处于正在安装的过程阶段,在这个阶段可以通过安装界面上的安装进度条控件,判断当前安装处于正在安装的阶段,在该阶段一般不需要模拟点击任何按键,只需等待正在安装过程结束后自动弹出下一安装界面,通常是安装完成的界面。
通过前面的各个步骤,已经完成的软件包的安装,那么后续就可以对在安装过程中释放的文件进行收集。
步骤150:监控所述软件包安装过程中释放的文件。
具体而言,可以通过调用钩子函数捕获到文件操作流,获得在软件包安装过程中释放的文件的文件路径。在Windows操作系统中,Windows操作系统工作于CPU的保护模式下,操作系统内核及设备驱动程序工作于0环(ring0),称为核心态;应用程序、动态链接库工作于3环,称为用户态。Windows提供的对文件操作的API都工作于用户态,只能供应用程序程序使用。要实现对文件操作过滤(也可称监控),就需要在文件系统驱动程序实现。当应用程序(比如在安装软件包的过程中)对文件进行操作时,将操作请求下传到处于内核态的I/O管理器,I/O管理器根据来自用户态的请求,建立相应的IRP包(I/Orequest packet),并将IRP发送到文件系统驱动程序处理。文件系统驱动程序本身是一个分层的驱动模型,上层是文件系统过滤驱动程序,中间是NTFS(New Technology File System,新技术档案系统)、FAT(File AllocationTable,档案配置表)等文件系统驱动程序,底层是存储设备驱动程序。对软件包安装过程中释放的文件的监控,就是在文件系统驱动程序分层中的上层挂钩子,过滤IRP包,获得关心的文件操作,比如获得安装过程中释放的文件的文件路径。具体而言,可以通过fnInstall函数安装钩子,通过fnStartHookEx启动钩子,添加回调函数,然后通过fnAddRule添加过滤规则,获得在软件包安装过程中释放的各种文件的文件路径等信息。
步骤160:收集在所述软件包的安装过程中释放的所需的文件。
根据步骤150监控获得的文件的文件路径,收集在软件包的安装过程中释放的所需的文件。具体而言,从释放的文件中识别出属于所需类型(如PE类和/或脚本类)的文件,然后根据这些文件的文件路径,拷贝这些文件,收集的文件包括但不限于新增的文件,还可以包括修改或删除的文件(比如安装升级包过程中可能会涉及),而且可以根据文件路径,在对原有文件进行修改或删除之前进行拷贝,从而保存更全面的文件。
此外,为了更全面的收集文件,可以通过调用系统API函数获得收集的文件的文件属性信息,比如包括文件的大小、创建时间、修改时间、文件签名等中的任意一种或多种。在具体实现时,例如可以通过GetFileSize获得文件的大小,通过FindFirstFile获得文件创建、修改时间,通过CertGetNameString获取签名串,通过WinVerifyTrust获得验证签名串有效性等等。
收集到上述文件和文件属性信息后,可以保存在本地或者传输给服务器保存。
以上公开了本发明一种用于实现文件收集的方法实施例,与所述方法实施例相对应,本发明还公开了一种用于实现文件收集的装置实施例,请参看图2,其为本发明一种用于实现文件收集的装置第一实施例示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
所述装置实施例包括:
软件包获得单元201,用于获得可安装的软件包;运行单元202,用于运行所述可安装的软件包;第一位置分析单元203,用于当出现所述软件包的安装界面时分析所述安装界面的内容,获得所述安装界面中继续安装类按键的位置信息;模拟点击单元204,用于根据所述继续安装类按键的位置信息,模拟点击所述继续安装类按键,直至所述软件包的安装完成为止;监控单元205,用于监控所述软件包安装过程中释放的文件;收集单元206,用于收集在所述软件包的安装过程中释放的所需的文件。
第一位置分析单元203有多种具体实施方式,下面示意性的给出两种,这两种具体实施方式可以单独使用,也可以结合使用。
可选的,第一位置分析单元203包括:第一查找单元,用于调用用以枚举界面上控件类型的系统API函数,查找当前安装界面上按键类型的控件;第一分析单元,用于分析所述按键类型的控件的文本内容,找出所述文本内容属于继续安装类的按键;第一位置获得单元,用于通过调用用以获取位置信息的系统API函数,获得所述继续安装类按键的位置信息。
可选的,所述第一位置分析单元203包括:第二查找单元,用于调用用以枚举界面上控件类型的系统API函数,查找当前安装界面上按键类型的控件;第三查找单元,用于调用用以查找按键不可用的系统API函数,找出所述控件中不可点击的按键类型的控件;第二分析单元,用于分析所述按键类型的控件的文本内容,找出所述文本内容属于停止安装类的按键;过滤单元,用于通过在所有的按键中过滤掉不可点击的按键和所述停止安装类的按键,找出继续安装类的按键和后退安装类的按键;第四查找单元,用于根据所述继续安装类的按键和后退安装类的按键之间的位置关系,或者通过模拟试点击的方式,找出继续安装类的按键;第二位置获得单元,用于通过调用用以获取位置信息的系统API函数,获得所述继续安装类按键的位置信息。
可选的,所述装置还可以包括:第二位置分析单元,用于根据继续安装类按键在上一安装界面中所处的位置信息,在当前安装界面中的雷同位置识别出所述当前安装界面中继续安装类按键的位置信息。
可选的,所述装置还可以包括:协议页识别单元,用于分析当前安装界面中是否包含协议类型的控件,识别出当前安装界面为协议页;第三位置分析单元,用于如果当前协议页中的继续安装类按键不可点击,则获取协议同意类型控件的按键位置信息;第二模拟点击单元,用于模拟点击所述协议同意类型控件的按键,直到所述继续安装类按键可以点击为止。
可选的,所述装置还可以包括:组件识别单元,用于分析当前安装界面中是否包含组件类型的控件,识别出当前安装界面为组件页;第三模拟点击单元,用于模拟点击所述组件页中所有组件类型控件的按键。
可选的,所述装置还可以包括:提示框识别单元,用于将当前弹出的弹出框尺寸与所述安装界面尺寸比较,如果所述弹出框的尺寸小于所述安装界面的尺寸,或小于所述安装界面的程度超过预置范围,则识别所述弹出框为提示框;第五查找单元,用于枚举所述提示框中控件类型的系统API函数,查找所述提示框中按键类型的控件;确认识别单元,用于在所述按键类型的控件中识别出确认类按键;第四位置分析单元,用于通过调用用以获得位置信息的系统API函数,获得所述提示框中确认类按键的位置信息;第四模拟点击单元,用于模拟点击所述提示框中的确认类按键。
以上各单元中提及的模拟点击都有多种具体实现方式,比如可以是模拟鼠标点击、模拟键盘点击和模拟触摸点击中的任意一种。
可选的,监控单元205,具体用于通过调用钩子函数捕获到文件操作流,获得在所述软件包安装过程中释放的文件的文件路径;收集单元206,具体用于根据所述监控单元提供的文件路径,收集在所述软件包的安装过程中释放的所需的文件。
可选的,收集单元206具体包括:识别子单元,用于从所述软件包安装过程中释放的文件中识别出属于PE类的文件和/或脚本类的文件;拷贝子单元,用于拷贝所述PE类文件和/或脚本类文件;属性获得子单元,用于通过调用系统API函数获得所述PE类文件和/或脚本类文件的文件属性信息。其中,属性获得子单元,具体用于获得所述PE类文件和/或脚本类文件的大小、创建时间、修改时间、文件签名中的任意一种或多种。
通过上述一种用于实现文件收集的方法和装置实施例可以看出,本发明实施例通过自动安装软件包的方式来收集安装过程中释放出的文件,使得收集到的文件更全面。而且,由于在进行安装过程中,是通过分析安装界面的内容,能够自动识别出需要点击的按键(比如继续安装类的按键),并且在识别之后通过模拟点击对应的按键,实现软件包的完全自动安装。因此,安装软件包的效率很高,而且对软件包的类型没有限制,适用性更广,所以使得文件收集的效率和全面性都得到了显著提高。
请参阅图3,其为本发明公开的一种用于实现文件自动安装的方法实施例流程图。本实施例中自动安装的具体是先锋方案也可以应用于前述用于实现文件收集的方法中,而且在前文已经对自动安装的各步骤进行了详细介绍,两个实施例对应步骤的具体实现可以相互借鉴。
步骤310:获得可安装的软件包。
在具体实现本步骤的过程中,有多种具体实施方式。比如,可以由服务器收集或人工收集当前网络上提供的下载可安装的软件包的链接,然后由服务器自动下载或者人工手动下载可安装的软件包。再比如,监控到某台计算机上有需要更新的软件,那么可以去下载该软件的升级包。可安装的软件包可以是升级的软件包,也可以是全新的一款可安装的软件包。本发明实施例对如何获得可安装的软件包并没有限制,只要能够获取到可安装的软件包,即可应用本发明实施例的技术方案。
步骤320:运行所述可安装的软件包。
在具体实现时,可以通过点击来运行可安装的软件包。也可以通过调用系统API函数creat process,自动运行可安装的软件包,以便达到自动运行的效果。
步骤330:当出现所述软件包的安装界面时分析所述安装界面的内容,获得所述安装界面中继续安装类按键的位置信息。
在运行可安装的软件包之后,会出现各种安装界面。进而,就需要对安装界面进行分析,通过分析安装界面的内容,获得安装界面中继续安装类按键的位置信息。本发明实施例中所述的继续安装类按键,包括但不限于“继续安装”、“继续”、“下一步”、“next”、“→”等,只要表示要将安装操作继续的按键都属于本发明实施例中的继续安装类按键。获得继续安装类按键的位置信息的具体实现方式有多种,下面仅给出几种具体实现方式的示例。
(二)获得继续安装类按键的位置信息的第一具体实现方式:
A:调用用以枚举界面上控件类型的系统API函数,查找当前安装界面上按键类型的控件;B:分析所述按键类型的控件的文本内容,找出所述文本内容属于继续安装类的按键;C:通过调用用以获取位置信息的系统API函数,获得所述继续安装类按键的位置信息。具体而言,对于不同的操作系统,调用的API函数不尽相同,以windows为例,可以调用EnumChildWindows这个Windows API枚举安装界面上的控件类型和控件值,控件类型多种多样,比如Static、各种Button、TRzBitBtn等等。其中,如果控件类型为“Button、TButton、TNewButton、TTntButton.UnicodeClass、obj_BUTTON、TRzBitBtn”等类型,则表明该控件是按键类型。在找出按键类型的控件后,就可以分析这些控件的文本内容,比如分析出其中哪些按键上的文本内容属于继续安装类的文本,比如文本内容是“继续安装”、“继续”、“下一步”等等,于是就找到本文内容属于继续安装类的按键。最后,通过调用可以获得控件位置信息的API函数获得继续安装类按键的位置信息,如用API函数FindWindow和FindWindowEx找到控件句柄后,再用GetWindowRect获取到控件的位置等所需信息。
(二)获得继续安装类按键的位置信息的第二具体实施方式:
A:调用用以枚举界面上控件类型的系统API函数,查找当前安装界面上按键类型的控件;B:调用用以查找按键不可用的系统API函数,找出所述控件中不可点击的按键类型的控件;C:分析所述按键类型的控件的文本内容,找出所述文本内容属于停止安装类的按键;D:通过在所有的按键中过滤掉不可点击的按键和所述停止安装类的按键,找出继续安装类的按键和后退安装类的按键;E:根据所述继续安装类的按键和后退安装类的按键之间的位置关系,或者通过模拟试点击的方式,找出继续安装类的按键;F:通过调用用以获取位置信息的系统API函数,获得所述继续安装类按键的位置信息。具体言之,第二具体实施方式中的步骤A和第一具体实施方式中的步骤A一样,所以不再赘述。在本实施方式中的步骤B,在Windows下,可以通过IsWindowEnabled这个Windows API判断按键控件是否可用,即是否可点击,从而找出不可点击的按键。本实施方式中的步骤C与前文第一实施方式中的步骤C使用的技术原理一样,只不过查找的不是继续安装类的按键,而是查找停止安装类的按键,比如按键的文本内容是“取消”、“cancel”、“停止安装”等代表不再继续安装、停止安装的意思。之所以本步骤如此操作,是因为通常继续安装类按键的文本表示内容多种多样,可能无法穷尽,而停止安装类按键的文本表示内容相对比较固定、种类较少,因此,可以通过排除法,先找出停止类按键,然后再一步步排除。找出不可点击的按键和停止类按键之后,剩余的基本就是继续安装类的按键和后退安装类按键。通常后退安装类按键和继续安装类按键之间有比较固定的位置关系,比如,继续安装类按键通常在后退安装类按键的右侧,于是就可以确定右侧的按键是继续安装类的按键。或者,也可以通过试点击的方式来确定哪个是继续安装类按键,比如,保存上一安装界面,模拟试点击继续安装类按键和后退安装类按键中的某一个,试点击之后,将新出现的安装界面与已保存的上一安装界面对比,如果两个界面一样,说明试点击的按键是后退安装类按键,反之,则说明试点击的按键是继续安装类的按键。步骤F中获取继续安装类按键的位置信息的具体实现与第一实施方式中的步骤C一样,不再赘述。
需要说明的是,虽然第二种具体实施方式获得位置信息的方式较第一具体实施方式复杂,但是通用性相对更强,所以各有优势,可以在不同实际情况下单独使用,也可以将两者结合使用。比如,可以在通过第一具体实施方式无法找出继续安装类按键的情况下,再采用第二种具体实施方式进行查找。
(三)获得继续安装类按键的位置信息的第三具体实施方式:
在通过某种方式已经获得某软件包安装过程中的一安装界面的继续安装类按键的位置信息,那可以通过下述方式获得该软件包后续安装界面上继续安装类按键的位置信息:根据继续安装类按键在上一安装界面中所处的位置信息,在当前安装界面中的雷同位置识别出所述当前安装界面中继续安装类按键的位置信息。一般而言,针对同一软件包而言,各安装界面上继续安装类按键在界面上的位置都是相对固定的,因此,可以根据继续安装类按键在上一安装界面中的所处位置,判断出下一安装界面中继续安装类按键的位置。
步骤340:根据所述继续安装类按键的位置信息,模拟点击所述继续安装类按键,直至所述软件包的安装完成为止。
模拟点击的具体实现方式很多,比如可以采用模拟鼠标点击的方式,也可以采用模拟键盘点击的方式,还可以采用模拟触摸点击的方式。比如,模拟鼠标点击而言,可以通过发送消息来实现,主要是通过SendMessage和PostMessage来实现,如下所示:SendMessage(hWnd,WM_COMMAND,MAKELPARAM(BN_CLICK,ID),hButtonWnd)。再比如,还可以首先需要通过SetCursorPos函数来设置需要单击的位置坐标,然后通过mouse_event等函数(包括MOUSEEVENTF_LEFTDOWN、MOUSEEVENTF_LEFTUP、MOUSEEVENTF_MOVE等多种参数)模拟在对应的位置按下、释放、移动等操作,从而达到模拟点击的效果。采用模拟键盘点击的具体实现与采用模拟鼠标点击的方案类似,只是在选中按键后将SendMessage和PostMessage中鼠标点击的参数替换为键盘点击的相关参数(比如替换为回车的参数),此处不再赘述。模拟触摸点击的方式,也是类似的,也可以通过SendMessage和PostMessage来实现。当然,还有很多其他的模拟点击方式,此处不再赘述,任何可以实现模拟点击的技术实现方式都可以应用在本发明实施例中。此外,此处介绍的模拟点击方式,不限于模拟点击继续安装类按键,还适用于模拟点击其他按键,也适用于本发明实施例中其他需要模拟点击的技术点,因为实现原理一样,故其他涉及模拟点击的部分不再赘述,请参看此处描述。
软件包的安装过程一般会涉及多个安装界面,也就是需要模拟点击多个继续安装类按键,才能最终完成安装过程,所以可以重复查找继续安装类按键以及模拟点击的步骤,直到安装完成为止。一般通过界面上的信息可以自动判断安装是否完成,比如,如果界面中有控件类型为ctrl1且值包含value1的控件,且有控件类型为ctrl2且值为value2的控件(例如可简写成规则<rulevalue="ctr11value1ctr12value2"/>),则被认为该软件成功安装。其他可以判断安装已完成的方式也应该应用到本发明实施例中,比如采用分析界面中按键文本内容的方式,如果分析出有“完成”、“安装完成”等表述安装完成类的文字,则也可证明安装完成,点击安装完成类的按键结束整个安装过程。
通过以上各步骤就可以完成多数软件的自动安装。不过由于软件包的差异化,在有些软件包的安装过程中,可能除了出现包括继续安装类按键的常规安装界面之外,还可能会出现其他的安装界面,比如协议页、组件页,或者提示框等,或者出现解压缩、环境准备过程、正在安装过程或者语言选择等非必然出现的各种情况,下面对可能出现的这几种情况进行详细说明。本领域技术人员可以理解,如果没有出现上述这几种特殊的情况,则不需要相关操作。
(1)介绍如何处理软件包安装过程中可能出现的协议页。
在具体实现时,分析当前安装界面中是否包含协议类型的控件,识别出当前安装界面为协议页;如果当前协议页中的继续安装类按键不可点击,则获取协议同意类型控件的按键位置信息;模拟点击所述协议同意类型控件的按键,直到所述继续安装类按键可以点击为止。比如,以windows为例,可以调用EnumChildWindows这个Windows API枚举安装界面上的控件类型和控件值,控件类型多种多样,比如Static、各种Button、TRzBitBtn等等。如果出现类型为RadioButton、TNewRadioButton、TRadioButton、TTntRadioButton.UnicodeClass、TCheckBox等控件时,就认为是协议页中“同意”或“不同意”对应的控件,进而,就可以识别出当前安装界面是协议页。通常而言,在协议页中,如果当前选默认选中的是“不同意”,那么该安装界面中继续安装类按键是不可点击的。
所以,可以先通过前文所述的多种方式查找到当前安装界面中的继续安装类按键,并判断该按键是否可以点击,如果不可点击,则获得“同意”和“不同意”两个按键的位置信息,通过模拟点击的方式尝试点击其中的任一按键,如果点击后发现该安装界面中继续安装类按键还是不可点击,那么证明当前尝试点击(选中)的是“不同意”,于是再点击另外一个按键,会发现该界面中继续安装类按键点击了,于是也说明当前选中点击的按键是协议“同意按键”。反之,如果初次尝试模拟点击一按键后,继续安装类按键可以点击了,那么就证明初次尝试模拟点击的是协议“同意”按键。当然,还可以分析当前安装界面中的文本内容,找到“同意”或“不同意”的文本内容,从而确定哪个按键是“同意”对应的控件,进而获得该按键的位置信息,通过模拟点击“同意”的按键控件,以便继续安装类按键可以点击。在继续安装类按键可以点击后,就可以通过步骤140模拟点击该类按键,逐步完成软件的安装。
(2)介绍如何处理软件包安装过程中可能出现的组件页。
分析当前安装界面中是否包含组件类型的控件,识别出当前安装界面为组件页;模拟点击所述组件页中所有组件类型控件的按键。与前述识别协议页的实现方案类似,调用EnumChildWindows这个Windows API枚举安装界面上的控件类型和控件值,如果出现类型为“TNewCheckListBox、CheckListBox”等组件类型的控件,则认为当前安装页是组件页。进而,通过模拟点击的方式将控件中可点击的组件选中。优选的,由于不同组件会释放不同的文件,因此优选,为了在安装过程使得要收集的文件更全面,可以将所有要可选择的组件都选中。同理,在选择好组件后,模拟点击当前安装页面中的继续安装类按键即可进入下一个安装界面。
(3)介绍如何处理软件包安装过程中可能出现的提示框。
具体而言,在软件安装过程中可能出现因各种原因出现的各种提示框,比如提示“文件夹已存在”、“是否确实要安装”等等提示框,虽然提示框的种类繁多,但通常无论是因何种原因出现何种提示框,一般提示框中可点击的按键只有两类,一类是确认类按键,如“确认”、“OK”等;另一类是取消类按键,如“取消”、“cancel”等等。因此可以通过下述方式自动处理提示框。比如,将当前弹出的弹出框尺寸与所述安装界面尺寸比较,如果弹出框的尺寸小于安装界面的尺寸,则识别该弹出框为提示框。可选的,为了防止不同安装界面尺寸之间存在微小误差,可以考虑当弹出框的尺寸小于所述安装界面的程度超过预置范围时,才将其识别为提示框,否则还认为是安装界面。比如可以设定如果当前弹出框的尺寸小于安装界面尺寸的几分之几时,就确定当天的弹出框是提示框,至于预置的范围具体是多少,以及设置为长度、宽度,还是面积,则可以根据具体实际情况而定,本发明对此并没有限制。然后调用用以枚举提示框中控件类型的系统API函数,查找所述提示框中按键类型的控件;在所述按键类型的控件中识别出确认类按键;通过调用用以获得位置信息的系统API函数,获得所述提示框中确认类按键的位置信息;模拟点击所述提示框中的确认类按键。
与识别安装界面中的继续安装类按键的具体实现类似,识别出确认类按键的方式也有多种。比如可以分析所述按键类型的控件的文本内容,获得所述文本内容属于确认类的按键;或者,分析所述按键类型的控件的文本内容,获得所述文本内容属于取消类的按键,从所述提示框的按键中过滤取消类按键,得到确认类按键。其余步骤的具体实现也与前述继续安装类按键的相关步骤实现雷同,故不再赘述。
(4)介绍如何处理需要解压缩的软件包、环境准备过程或者语言选择等可能出现的情况。
有些可安装的软件包在下载时是压缩包,因此需要进行解压缩。多数情况下运行软件包时会自动识别压缩格式,进而通过对应的解压工具进行解压。解压过程中,在安装界面上一般会出现进度条的控件,因此可以通过分析当前安装界面中是否存在进度条类型的控件,来判断当前是否处于解压状态。可选的,为了处理个别情况下因无法正确解压而造成不能正常安装,可以设置一超时机制,当超过预设时间解压进度条仍然没有消失,则停止安装,即模拟点击当然安装界面上的停止安装类按键。
在安装过程中可能会出现包括语言选择的安装界面,通过分析安装界面上的文字信息可以识别出语言选择界面,比如界面上有“语言”或“language”等内容,则确认当前安装界面是语言选择界面,通常情况下,选择按照默认选项即可,然后模拟点击该安装界面上的继续安装类按键。
此外,在安装过程中还可能出现处于环境准备过程的阶段,这个阶段对安装基本没有影响,在该阶段,安装界面中的继续安装类按键一般是灰的,即无法点击状态,只有环境准备过程结束后,继续安装类按键才可以点击,进而通过模拟点击继续安装类按键即可进入下一安装界面。
此外,在软件安装过程中还可能会出现处于正在安装的过程阶段,在这个阶段可以通过安装界面上的安装进度条控件,判断当前安装处于正在安装的阶段,在该阶段一般不需要模拟点击任何按键,只需等待正在安装过程结束后自动弹出下一安装界面,通常是安装完成的界面。
以上详细介绍了本发明公开的一种用于实现文件自动安装的方法实施例,下面再结合一款视频下载器的自动安装的具体实施方式为例,进一步详细介绍。
请参阅图4,其为本发明视频下载器自动安装具体实施方式中的第一界面示意图。该示意图是在某款视频软件包运行启动后出现的安装界面。在这个软件包的安装过程中,没有出现“语言选择”、“解压”等过程,直接进入带有“下一步”,(继续安装类按键的一种)的安装界面。在该安装界面中识别“下一步”按键。由于在这个界面中,只有两个按键“下一步(N)>”和“取消”按键,因此过滤掉“取消”按键,就剩下“下一步(N)>”按键。进而模拟点击该安装界面中的“下一步(N)>”按键进入下一个界面。
请继续参阅图5,其为本发明视频下载器自动安装具体实施方式中的第二界面示意图。该安装界面是一协议页。可以看出,在该安装界面上,根据上一安装界面中“下一步(N)>”按键位置找到当前安装界面中“下一步(N)>”按键,但是这个“下一步(N)>”按键是不可点击的。进而,在当前安装界面上通过控件类型找到“我接受协议”控件和“我不接受协议”控件。顺序模拟点击“我接受协议”控件和“我不接受协议”控件,当模拟点击“我接受协议”控件时,出现下一安装界面。
请继续参阅图6,其为本发明视频下载器自动安装具体实施方式中的第三界面示意图。从该示意图可以看出,由于已经模拟点击选中了“我接受协议”控件,因此“下一步(N)>”变成可点击状态。进而,模拟点击“下一步(N)>”按键,接入下一个安装界面。
请继续参阅图7,其为本发明视频下载器自动安装具体实施方式中的第四界面示意图。同理,在该安装界面中,根据上一安装界面中“下一步(N)>”按键位置找到该安装界面中“下一步(N)>”按键,并模拟点击“下一步(N)>”按键。进入下一个安装界面。
请继续参阅图8,其为本发明视频下载器自动安装具体实施方式中的第五界面示意图。同理,在该安装界面中,根据上一安装界面中“下一步(N)>”按键位置找到该安装界面中“下一步(N)>”按键,并模拟点击“下一步(N)>”按键。进入下一个安装界面。
请继续参阅图9,其为本发明视频下载器自动安装具体实施方式中的第六界面示意图。同理,在该安装界面中,根据上一安装界面中“下一步(N)>”按键位置找到该安装界面中“下一步(N)>”按键,并模拟点击“下一步(N)>”按键。进入下一个安装界面。
请继续参阅图10,其为本发明视频下载器自动安装具体实施方式中的第七界面示意图。同理,在该安装界面中,根据上一安装界面中“下一步(N)>”按键位置找到当前安装界面中“安装(I)”按键,因为下一步(N)>和“安装(I)”都属于继续安装类按键,所以同样可以通过上一安装界面中“下一步(N)>”按键位置找到当前安装界面中“安装(I)”按键的位置。进而,模拟点击“下一步(N)>”按键。进入下一个安装界面。
请继续参阅图11,其为本发明视频下载器自动安装具体实施方式中的第八界面示意图。在当前安装界面中,根据界面中的进度条控件,可以判断是“正在安装”过程,在该步骤不需要做任何操作,等待“正在安装”过程结束。安装结束后,会自动进入下一安装界面。
请继续参阅图12,其为本发明视频下载器自动安装具体实施方式中的第九界面示意图。在本步骤就是要判断软件包是否正常安装完成。通过规则“STATIC安装向导已完成*的安装BUTTON完成(F)”来判断该软件包是否安装完成。该规则含义是,如果界面上出现控件包含“安装向导已完成*的安装”的STATIC和包含“完成(F)”的BUTTON,其中“*”是通配符,则说明安装已完成,当前安装界面是安装已完成的界面。到此为止,软件包的自动安装完成,程序返回的结果也是“完成安装”。
与前述一种用于实现软件包自动安装的方法实施例相对应,本发明还公开了一种用于实现软件包自动安装的装置实施例,请参看图13,其为本发明一种用于实现软件包自动安装的装置实施例示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
所述装置实施例包括:
软件包获得单元131,用于获得可安装的软件包;运行单元132,用于运行所述可安装的软件包;第一位置分析单元133,用于当出现所述软件包的安装界面时分析所述安装界面的内容,获得所述安装界面中继续安装类按键的位置信息;第一模拟点击单元134,用于根据所述继续安装类按键的位置信息,模拟点击所述继续安装类按键,直至所述软件包的安装完成为止。
可选的,第一位置分析单元133有多种具体实施方式,下面示意性的给出两种,这两种具体实施方式可以单独使用,也可以结合使用。
可选的,第一位置分析单元133包括:第一查找单元,用于调用用以枚举界面上控件类型的系统API函数,查找当前安装界面上按键类型的控件;第一分析单元,用于分析所述按键类型的控件的文本内容,找出所述文本内容属于继续安装类的按键;第一位置获得单元,用于通过调用用以获取位置信息的系统API函数,获得所述继续安装类按键的位置信息。
可选的,所述第一位置分析单元133包括:第二查找单元,用于调用用以枚举界面上控件类型的系统API函数,查找当前安装界面上按键类型的控件;第三查找单元,用于调用用以查找按键不可用的系统API函数,找出所述控件中不可点击的按键类型的控件;第二分析单元,用于分析所述按键类型的控件的文本内容,找出所述文本内容属于停止安装类的按键;过滤单元,用于通过在所有的按键中过滤掉不可点击的按键和所述停止安装类的按键,找出继续安装类的按键和后退安装类的按键;第四查找单元,用于根据所述继续安装类的按键和后退安装类的按键之间的位置关系,或者通过模拟试点击的方式,找出继续安装类的按键;第二位置获得单元,用于通过调用用以获取位置信息的系统API函数,获得所述继续安装类按键的位置信息。
可选的,所述装置还可以包括:第二位置分析单元,用于根据继续安装类按键在上一安装界面中所处的位置信息,在当前安装界面中的雷同位置识别出所述当前安装界面中继续安装类按键的位置信息。
可选的,所述装置还可以包括:协议页识别单元,用于分析当前安装界面中是否包含协议类型的控件,识别出当前安装界面为协议页;第三位置分析单元,用于如果当前协议页中的继续安装类按键不可点击,则获取协议同意类型控件的按键位置信息;第二模拟点击单元,用于模拟点击所述协议同意类型控件的按键,直到所述继续安装类按键可以点击为止。
可选的,所述装置实施例还可以包括:组件识别单元,用于分析当前安装界面中是否包含组件类型的控件,识别出当前安装界面为组件页;第三模拟点击单元,用于模拟点击所述组件页中所有组件类型控件的按键。
可选的,所述装置实施例还可以包括:提示框识别单元,用于将当前弹出的弹出框尺寸与所述安装界面尺寸比较,如果所述弹出框的尺寸小于所述安装界面的尺寸,或小于所述安装界面的程度超过预置范围,则识别所述弹出框为提示框;第五查找单元,用于枚举所述提示框中控件类型的系统API函数,查找所述提示框中按键类型的控件;确认识别单元,用于在所述按键类型的控件中识别出确认类按键;第四位置分析单元,用于通过调用用以获得位置信息的系统API函数,获得所述提示框中确认类按键的位置信息;第四模拟点击单元,用于模拟点击所述提示框中的确认类按键。
以上各单元中提及的模拟点击都有多种具体实现方式,比如可以是模拟鼠标点击、模拟键盘点击和模拟触摸点击中的任意一种。
本发明实施例不需要事先对待安装的软件包类型进行识别分析、安装录制,而是通过在安装过程中对安装界面进行具体分析找出需要模拟点击的按键,从使得本发明实施例的软件包自动安装方案,可以适用于各种类型软件包的安装,因此应用范围更广,自动安装的效率更高。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上对本发明所提供的一种用于实现文件收集、软件包自动安装的方法及装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本发明的限制。