发明内容
为了增强界面安全性,确保用户通过界面输入信息的使用过程的安全可靠,本发明实施例提供了一种增强界面安全性的方法。所述技术方案如下:
一方面,提供了一种增强界面安全性的方法,所述方法包括:
获得目标窗口的输入控件的坐标;
根据所述获得的目标窗口的输入控件的坐标,将强化窗口的输入控件与所述目标窗口的输入控件进行重合;
对所述目标窗口进行截图,并将得到的图像设置为所述强化窗口的背景;
接收用户输入的信息。
所述获得目标窗口的输入控件的坐标的步骤之前,所述方法还包括:
定位目标窗口;
获得所述目标窗口的句柄,根据所述句柄获得所述目标窗口的坐标;
根据所述目标窗口的坐标,将所述强化窗口和所述目标窗口进行重合并将所述目标窗口覆盖。
所述定位目标窗口的步骤具体为:
枚举当前显示的所有窗口,对枚举得到的窗口进行判断,得到目标窗口。
所述对枚举得到的窗口进行判断,得到目标窗口的步骤,包括:
根据窗口属性,判断枚举得到的窗口的窗口属性值是否为预设的目标窗口的窗口属性值,如果是,则所述枚举得到的窗口为目标窗口;如果不是,则所述枚举得到的窗口不为目标窗口。
所述将所述强化窗口和所述目标窗口进行重合并将所述目标窗口覆盖的步骤,包括:
将所述强化窗口的左上角的坐标设置为与所述目标窗口的左上角的坐标相同;
获得所述目标窗口的大小,将所述强化窗口的大小设置为与所述目标窗口的大小相同;
获得所述目标窗口的标题参数,将所述强化窗口的标题设置为与所述目标窗口的标题相同。
所述获得目标窗口的输入控件的坐标的步骤,包括:
枚举所述目标窗口的所有子窗口;
获得所述目标窗口的输入控件的窗口属性;
根据所述窗口属性,获得所述目标窗口的输入控件的窗口句柄;
根据所述窗口句柄,获得所述目标窗口的输入控件的坐标。
所述根据所述获得的目标窗口的输入控件的坐标,将强化窗口的输入控件与所述目标窗口的输入控件进行重合的步骤,包括:
将所述强化窗口的输入控件的坐标设置为与所述目标窗口的输入控件的坐标相同;
获得所述目标窗口的输入控件的大小,将所述强化窗口的输入控件的大小设置为与所述目标窗口的输入控件的大小相同;
获得所述目标窗口的输入控件的标题参数,将所述强化窗口的输入控件的标题设置为与所述目标窗口的输入控件的标题相同。
所述对所述目标窗口进行截图的步骤之前,所述方法还包括:
获得所述目标窗口的确定按键和取消按键的坐标;
根据所述坐标,分别将所述获得的目标窗口的确定按键和取消按键与所述强化窗口的确定按键和取消按键进行重合。
所述获得所述目标窗口的确定按键和取消按键的坐标的步骤,包括:
根据所述目标窗口的确定按键的标识和取消按键的标识,获得所述确定按键和取消按键的窗口句柄;
根据所述窗口句柄,获得所述目标窗口的确定按键和取消按键的坐标。
所述接收用户输入的信息,具体包括:
根据接收的用户输入的信息,当判断用户触发的按键是确定按键时,则所述强化窗口将所述用户输入的信息发送给创建所述目标窗口的进程,并令所述目标窗口关闭后关闭所述强化窗口自身;当判断用户触发的按键是取消按键时,则所述强化窗口直接令所述目标窗口关闭后关闭所述强化窗口自身。
所述获得目标窗口的输入控件的坐标的步骤之前,所述方法还包括:
获得要覆盖的所述目标窗口的区域;
根据所述获得的目标窗口的区域,计算覆盖所述目标窗口的输入控件所需的窗口大小;
将所述强化窗口大小设置为所述计算得到的所需的窗口大小;
获得所述目标窗口的输入控件的窗口指针。
所述覆盖所述目标窗口的输入控件所需的窗口大小具体为:
所述覆盖所述目标窗口的输入控件所需的窗口的宽度与所述目标窗口的区域的宽度一致;
所述覆盖所述目标窗口的输入控件所需的窗口的高度与所述目标窗口的输入控件右下角的垂直坐标一致。
所述获得所述目标窗口的输入控件的窗口指针的步骤,包括:
获得所述目标窗口的输入控件的标识,根据所述标识获得所述目标窗口的输入控件的窗口指针,其中,所述标识是由所述目标窗口调用并显示强化窗口时指定。
所述将强化窗口的输入控件与所述目标窗口的输入控件进行重合的步骤,包括:
根据所述目标窗口的输入控件的坐标,将所述强化窗口的输入控件的坐标设置为与所述目标窗口的输入控件的坐标相同。
所述接收用户输入的信息,具体包括:
接收并保存用户输入的信息,所述强化窗口在被所述目标窗口调用时将所述用户输入的信息发送给所述目标窗口的相应成员变量,完成交互过程,然后结束。
所述强化窗口中至少包括一个输入控件,其中,所述输入控件的个数与所述目标窗口的输入控件的个数相同。
本发明实施例提供的技术方案的有益效果是:
通过提供的强化窗口对目标窗口进行重合覆盖,使得用户输入的信息能够发送给创建强化窗口的进程进行处理,从而有效确保用户通过界面输入信息的使用过程的安全可靠,增强了界面安全性。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
为了增强界面安全性,确保用户通过界面输入信息的使用过程的安全可靠,本发明实施例提供了一种增强界面安全性的方法,参见图1,该方法内容包括:
S1:获得目标窗口的输入控件的坐标;
S2:根据所述获得的目标窗口的输入控件的坐标,将强化窗口的输入控件与所述目标窗口的输入控件进行重合;
S3:对所述目标窗口进行截图,并将得到的图像设置为所述强化窗口的背景;
S4:接收用户输入的信息。
为了对本发明实施例提供的方法进行详细说明,请参见如下各实施例:
实施例1
为了增强界面安全性,确保用户通过界面输入信息的使用过程的安全可靠,本发明实施例提供了一种增强界面安全性的方法,参见图2,该方法内容如下:
步骤101:创建强化窗口;
在本实施例中需要创建强化窗口,其中强化窗口带有如下控件:确定按键、取消按键和输入控件,并且输入控件的数量与要强化的目标窗口所包含的输入控件相同。本实施例为了便于说明,假设预先获知了待进行强化的目标窗口内所包含的输入控件的数量。
同时为了提高安全性,强化窗口具备安全输入功能,例如,输入控件支持软键盘输入,防止键盘钩子;或者,输入控件是基于非输入控件开发的安全输入控件,防止窗口监视;或者,支持虚拟桌面功能,窗口界面显示于新建的桌面,屏蔽其他进程的输入输出,使得可能存在的木马等攻击进程失效。
步骤102:定位目标窗口
在本实施例中,强化窗口是由第三方进程而不是实际进行人机交互的进程创建的,因此需要定位将要覆盖的目标窗口。优选地,在本实施例中,通过预先约定的窗口标题来定位目标窗口,具体方法是:
步骤102-1:通过调用WINDOWS API EnumWindows()函数枚举当前显示的所有窗口;
步骤102-2:判断枚举得到的窗口是否为目标窗口,如果是,则执行步骤103,否则,继续执行步骤102-1,直到判断得到目标窗口或直到将枚举得到的所有窗口已判断完;
其中,在本实施例步骤102中,在判断枚举得到的窗口是否为目标窗口时,可以采用通过使用窗口标题来判断枚举得到的窗口是否为目标窗口的方式,具体内容如下:预先定义好目标窗口的标题,判断枚举得到的窗口的标题是否为事先约定的标题,如果是,则枚举得到的窗口为目标窗口,否则枚举得到的窗口不是目标窗口。本领域技术人员可以获知,还可以通过其他通用窗口属性来判断枚举得到的窗口是否为目标窗口,如窗口大小、窗口图标和窗口光标等。
步骤103:通过WINDOWS窗口类方法GetSafeHWnd获得目标窗口的句柄;
在本实施例中,在确定目标窗口的句柄之后,声明强化窗口对应的类实例,将目标窗口的句柄关联到类实例,即将强化窗口与目标窗口相关联,由于之前已经创建了强化窗口,则通过WINDOWS对话框类方法DoModal显示强化窗口。
在此过程中,windows系统会调用WINDOWS对话框类方法OninitDialog,并且通过此方法来进行后续步骤。
步骤104:通过WINDOWS窗口类方法GetWindowRect获得目标窗口的坐标;
步骤105:利用WINDOWS窗口类方法MoveWindow或SetWindowPos将强化窗口移到目标窗口处,并将强化窗口的大小设置为与目标窗口的大小相同,从而与目标窗口重合并将其覆盖;
其中,windows窗口的坐标以左上角为起点,根据步骤104获取的目标窗口的坐标,将强化窗口左上角的坐标设为与目标窗口的左上角坐标相同,即可完成重合;
在本实施例中,还可以预先设置强化窗口的标题栏、最大化/最小化按钮、窗口标题等各个参数与目标窗口对应的各个参数相同;
或者,
如果未预先进行上述设置,则在执行步骤104和步骤105的同时,还执行如下操作:利用WINDOWS窗口类方法GetWindowInfo获得目标窗口当前的各项参数,如标题栏、最大化/最小化按钮、窗口标题等;利用WINDOWS窗口类方法ModifyStyle以及SetWindowText将强化窗口的参数设置为与目标窗口的参数相同。
步骤106:通过调用WINDOWS API EnumChildWindows()来枚举目标窗口中的所有子窗口;
步骤107:利用WINDOWS API GetWindowLong获取目标窗口的输入控件的窗口属性;
优选地,在本实施例中,目标窗口中只含有一个输入控件;本领域技术人员可以获知,目标窗口中还可以含有多个输入控件,则相应地,事先约定各个输入控件的标识ID,或者为各个输入控件设置预先约定的不同的属性。
步骤108:根据输入控件的窗口属性获取输入控件的窗口句柄;
步骤109:利用GetWindowRect和WINDOWS窗口类方法ScreenToClient获得目标窗口的输入控件的坐标;
其中,在本实施例中,由于强化窗口与目标窗口重合,因此步骤109中获得的目标窗口的输入控件的坐标也即为强化窗口的输入控件的坐标。
步骤110:将强化窗口的输入控件与目标窗口的输入控件重合;
其中,在本实施例步骤110中,将强化窗口的输入控件与目标窗口的输入控件重合的方法与步骤105中将强化窗口与目标窗口重合的方法相同;
即,将所述强化窗口的输入控件的坐标设置为与所述目标窗口的输入控件的坐标相同;
获得所述目标窗口的输入控件的大小,将所述强化窗口的输入控件的大小设置为与所述目标窗口的输入控件的大小相同;
获得所述目标窗口的输入控件的标题参数,将所述强化窗口的输入控件的标题设置为与所述目标窗口的输入控件的标题相同。。
步骤111:利用WINDOWS对话框类方法GetDlgITem根据目标窗口中“确定”和“取消”这两个按键的控件标识ID,获得“确定”和“取消”两个按键对应的窗口句柄;
在本实施例中,对于一般的窗口来说,“确定”和“取消”这两个按键的控件标识ID通常是确定的,分别为IDOK和IDCANCEL,因此可以直接使用这两个预定义的控件ID获得相应的窗口句柄;
进一步地,如果“确定”和“取消”这两个按键的控件ID发生变化时,则需要事先约定这两个按键的控件标识ID,并根据其获得相应的窗口句柄。
步骤112:根据获得的窗口句柄,获得“确定”和“取消”这两个按键的坐标,从而将强化窗口的相应按键与目标窗口的按键重合;
进一步地,在本实施例中,还可以包括:利用WINDOWS窗口类方法EnableWindow将强化窗口的“确定”按键设置为不可用状态,直到用户在输入控件里的输入符合预设条件(如用户在输入控件里输入的字符或数字的数量达到一定程度)时再置为可用。
步骤113:利用WINDOWS API CreateCompatibleBitmap对目标窗口进行截图,并将截图得到的图像设为强化窗口的背景;
为了改善用户的使用体验,在本实施例中,将对目标窗口进行截图后获取的图像设置为强化窗口的背景,从而使得强化窗口的外观与目标窗口基本一致且完全覆盖目标窗口,实现了在不约定目标窗口具体样式的情况下,引入安全输入方式的同时使得用户感观不发生变化,有利于改善用户体验。
步骤114:接收用户的输入信息,并判断用户按下的是“确定”按键还是“取消”按键,如果是“确定”按键,则执行步骤115;如果是“取消”按键,则直接执行步骤116;
步骤115:强化窗口将用户输入的信息通过Windows API PostMessage或者SendMessage发送给创建目标窗口的进程进行处理;
强化窗口也可以将用户输入的信息传给所属的第三方进程,再由第三方进程与目标窗口所属的进程(即创建目标窗口的进程)进行通信(具体手段如共享内存、文件、注册表、管道、消息等等),把用户输入的信息发给目标窗口所属的进程,完成人机交互。
步骤116:强化窗口通过WINDOWS定义的WM_CLOSE消息向目标窗口发出关闭消息,使目标窗口关闭,然后关闭自身,结束。
综上所述,本发明实施例提供的方法,通过提供的强化窗口对目标窗口进行重合覆盖,使得用户输入的信息能够发送给创建强化窗口的进程进行处理,从而有效确保用户通过界面输入信息的使用过程的安全可靠,增强了界面安全性。
实施例2
为了增强界面安全性,确保用户通过界面输入信息的使用过程的安全可靠,本发明实施例提供了一种增强界面安全性的方法,与实施例1不同在于,本实施例中将强化窗口封装为插件,在目标窗口显示时主动调用。在这种情况下,强化窗口的父窗口就是目标窗口。并且强化窗口中只包含输入控件,不包含确定按键和取消按键。
相应地,本发明实施例提供的方法,当目标窗口显示强化窗口时,参见图3,该方法内容如下:
步骤201:强化窗口获取要覆盖的目标窗口的区域。具体地,强化窗口通过WINDOWS窗口类方法GetClientRect获得目标窗口的客户区的坐标,其中客户区的左上角的坐标为(0,0)即原点;
目标窗口的客户区即为目标窗口中允许绘制子窗口的区域。
步骤202:强化窗口计算覆盖目标窗口中的输入控件所需的窗口大小;
优选地,在本实施例中,覆盖目标窗口中的输入控件所需的窗口大小为:宽度与目标窗口的客户区的宽度一致,高度与目标窗口中的输入控件的右下角相对原点的垂直坐标一致,并且为了进一步改善用户体验,还要在此基础上分别添加当前系统定义的窗口边框的宽度和高度,其中窗口边框的宽度和高度可利用Windows API GetSystemMetrics()得到。
步骤203:强化窗口利用WINDOWS窗口类方法MoveWindow或SetWindowPos将自身移到目标窗口客户区中,即将自身的左上角坐标设为(0,0),再将大小设置为步骤202中计算出的大小;
步骤204:强化窗口利用WINDOWS对话框类方法GetDlgITem获得目标窗口的输入控件的窗口指针,再利用WINDOWS窗口类方法GetWindowRect获得目标窗口的输入控件的坐标;
在本实施例中,方法GetDlgITem获取目标窗口的输入控件的窗口指针时所需的输入控件标识ID是由目标窗口调用并显示强化窗口时指定的。
步骤205:将强化窗口的输入控件与目标窗口的输入控件重合;
在本实施例步骤205中,重合的具体方法是:将强化窗口的输入控件的坐标设为与目标窗口的输入控件坐标相同;此时强化窗口的输入控件与目标窗口的输入控件重合并完全覆盖,用户将通过强化窗口的输入控件进行输入。
步骤206:利用WINDOWS API CreateCompatibleBitmap对目标窗口进行截图,选取与强化窗口的位置和尺寸相同的部分,将其设为强化窗口的背景;
步骤207:强化窗口等待用户输入信息,保存用户输入的信息,在被目标窗口调用时把信息传给目标窗口的相应成员变量,完成交互过程,然后结束;
本发明实施例提供了一种增强界面安全性的方法,通过提供的强化窗口对目标窗口进行重合覆盖,使得用户输入的信息能够发送给创建强化窗口的进程进行处理,从而有效确保用户通过界面输入信息的使用过程的安全可靠,增强了界面安全性。并且该方法使得界面在不影响用户体验的同时提高了安全性,并且还可以自动适应上层应用定义的不同界面。
本发明实施例中的“接收”一词可以理解为主动从其他模块获取也可以是接收其他模块发送来的信息。
本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本发明实施例中的部分步骤,可以利用软件实现,相应的软件程序可以存储在可读取的存储介质中,如光盘或硬盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。