技术领域
[0001] 本
发明涉及
多窗口操作技术领域,尤其涉及一种窗口切换方法和一种窗口切换装置。
背景技术
[0002] 目前,实现应用程序窗口切换的方法主要有下面两种:一种是在Windows下通过
键盘执行alt+tab(alt键组合tab键使用)根据系统
进程列表调出当前窗口列表,从而实现进行窗口切换,但这个需依赖键盘操作,在没有键盘时不能执行这操作。第二种是使用程序模拟键盘操作向系统发送模拟键盘消息实现键盘切换,却容易出现切换窗口不成功情况,如执行切换窗口命令后待切换的目标窗口没有被置前。同时操作时易受系统其它程序的窗口的影响,致使无法切换到系统输入法等系统内部窗口等问题。还可能会因
操作系统停止响应的进程阻塞的影响,切换过程长时间延迟,影响用户体验。因此,增强窗口切换实时性,提高窗口切换成功率成为一个迫切需要解决的问题。
发明内容
[0003] 基于此,本发明提供了一种窗口切换方法和一种窗口切换装置。
[0004] 一种窗口切换方法,包括以下步骤:
[0005] 实时判断当前系统的置前窗口是否符合预设切换条件,如果符合则将其窗口
指针添加至窗口数据链表中;
[0006] 循环读取第一列表中记录的用户的窗口切换
请求,每读取到一次窗口切换请求,则从所述窗口数据链表中获取最近一次置前窗口的窗口指针;
[0007] 如果获取的最近一次置前窗口的窗口指针有效,则将该窗口指针添加至第二列表中;
[0008] 循环读取所述第二列表中的窗口指针,将相应的窗口置前。
[0009] 与一般技术相比,本发明窗口切换方法可记录最近的焦点窗口,采用轮询的方法,能够分离查询线程和响应线程进行后台程序切换窗口。减少了其它系统程序对窗口切换的影响,提高了窗口切换的实时性,同时能大大提高窗口切换的成功率。
[0010] 一种窗口切换装置,包括窗口记录模
块、轮询模块和响应模块;
[0011] 所述窗口记录模块,用于实时判断当前系统的置前窗口是否符合预设切换条件,如果符合则将其窗口指针添加至窗口数据链表中;
[0012] 所述轮询模块,用于循环读取第一列表中记录的用户的窗口切换请求,每读取到一次窗口切换请求,则从所述窗口数据链表中获取最近一次置前窗口的窗口指针;
[0013] 如果获取的最近一次置前窗口的窗口指针有效,则所述轮询模块将该窗口指针添加至第二列表中;
[0014] 所述响应模块,用于循环读取所述第二列表中的窗口指针,将相应的窗口置前。
[0015] 与一般技术相比,本发明窗口切换装置可记录最近的焦点窗口,采用轮询的方法,能够分离查询线程和响应线程进行后台程序切换窗口。减少了其它系统程序对窗口切换的影响,提高了窗口切换的实时性,同时能大大提高窗口切换的成功率。
附图说明
[0016] 图1为本发明窗口切换方法的流程示意图;
[0017] 图2为应用本发明窗口切换方法的一个优选
实施例的工作原理图;
[0018] 图3为本发明窗口切换装置的结构示意图。
具体实施方式
[0019] 为更进一步阐述本发明所采取的技术手段及取得的效果,下面结合附图及较佳实施例,对本发明的技术方案,进行清楚和完整的描述。
[0020] 请参阅图1,为本发明窗口切换方法的流程示意图。本发明窗口切换方法,包括以下步骤:
[0021] S101实时判断当前系统的置前窗口是否符合预设切换条件,如果符合则将其窗口指针添加至窗口数据链表中;
[0022] 作为其中一个实施例,以预设时间段为周期,循环获取当前系统的置前窗口的窗口句柄;根据获取的所述窗口句柄判断该窗口是否符合预设切换条件。
[0023] 作为其中一个实施例,所述预设时间段为20毫秒。
[0024] 系统运行时的窗口记录部分,在尽量减少系统资源占用和避免错漏窗口记录,通过判定最优时间T0间,使用线程按T0查询当前系统激活窗口,获取到窗口句柄后判断该窗口是否符合切换窗口条件F0,符合条件的窗口将窗口指针更新进窗口数据链表中。
[0025] T0的时间按下值计算:
[0026] 人眼的残影现象,对显示图像变化超24
帧/秒人眼是分辨不出来的,因此T0<(1/24)秒;
[0027] 对键盘或
鼠标的点击速度一般只到300次/分钟,如键盘组合键(alt+tab)只能达约100/分钟,T0<(1/24)秒可满足用户通过键盘鼠标操作的窗口切换;
[0028] 对窗口查询的操作进行越快,则系统需更多时间处理查询操作,即窗口记录的线程周期越慢则总体系统运行的效率越高。
[0029] 因此,可将(1/24)的周期加快2倍,使用1/50秒即20毫秒以满足系统使用。
[0030] 条件F0按下条件筛选:
[0031] 当前窗口是否己是链表顶层窗口,是则不处理;
[0032] 当前窗口是否系统桌面
子窗口或菜单或提示信息窗口,是则不处理;
[0033] 当前窗口符合用户自主筛选的排除窗口,如响应模块生成的窗口W,是则不处理。
[0034] S102循环读取第一列表中记录的用户的窗口切换请求,每读取到一次窗口切换请求,则从所述窗口数据链表中获取最近一次置前窗口的窗口指针;
[0035] 可使用共享
锁Lock辅助线程轮询处理,如果锁Lock为锁定状态,则只记录用户切换窗口请求到第一列表List1。
[0036] 如锁Lock为开锁状态,可启动线程按T0速度循环读取记录用户的切换窗口请求的第一列表List1,读取到请求,则从窗口数据链表取出上次置前激活窗口指针P。
[0037] S103如果获取的最近一次置前窗口的窗口指针有效,则将该窗口指针添加至第二列表中;
[0038] 作为其中一个实施例,如果获取的最近一次置前窗口的窗口指针非空,窗口属性不是隐藏状态,并且窗口大小不为零,则判断该窗口指针有效,将其添加至第二列表中。
[0039] 作为其中一个实施例,在从窗口数据链表中获取最近一次置前窗口的窗口指针之后,如果获取的最近一次置前窗口的窗口指针无效,则从所述窗口数据链表中删除该窗口指针。
[0040] 如指针P有效F1则指针发送到待响应模块待置前激活窗口列表,即第二列表List2,并将锁Lock锁定,否则从窗口数据链表册除此窗口指针,依次按窗口数据链表向前取上次的激活指针进行处理。
[0041] 窗口有效性F1的条件可为:窗口指针P非空,窗口仍存在;窗口属性不是隐藏状态;窗口大小不为0。
[0042] S104循环读取所述第二列表中的窗口指针,将相应的窗口置前。
[0043] 初始化时在用户可见显示区外生成一大小为1*1的窗口W,作为激活窗口时的辅助窗口,并设为隐藏状态。初始化时另启动线程按T0速度循环读取待置前激活窗口列表,即第二列表List2,如Lock状态为开锁,程序读取到请求后执行窗口置前操作P,完成后将锁Lock设为开锁状态。
[0044] 窗口置前操作P共有3部分:
[0045] 使用系统API设置窗口置前;
[0046] 如上述1设置失败,则先设置窗口W置前,再将待置前窗口用系统API执行置前激活操作;
[0047] 如待置前窗口无响应,则响应模块等待1秒钟后该窗口无法置前,则将本次切换动作请求丢弃,等待下次切换请求。
[0048] 优选地,可在PC上增加一个按键装置,按键被用户激活后执行切换操作,每次点击按键后将上次的置前激活窗口置前。响应时间小于0.1秒。
[0049] 优选地,可在PC上接收一个接收切换程序的服务,接收到网络发送到的切换消息或用户其它进程的切换消息,则执行窗口切换操作。
[0050] 请参阅图2,为应用本发明窗口切换方法的一个优选实施例的工作原理图。各模块调用关系如该图所示。
[0051] 与一般技术相比,本发明窗口切换方法可记录最近的焦点窗口,采用轮询的方法,能够分离查询线程和响应线程进行后台程序切换窗口。减少了其它系统程序对窗口切换的影响,提高了窗口切换的实时性,同时能大大提高窗口切换的成功率。
[0052] 本发明是通过记录最近焦点窗口来进行后台程序切换窗口,从而大大提高窗口有效窗口的切换率,并且能有效避免切换到系统窗口而非用户所期望的窗口的问题。
[0053] 依赖链表判断是否符合切换条件的窗口,提高有效窗口的切换率。对用户切换请求和响应请求使用独立的处理模块执行,响应模块超时不影响轮询模块记录用户的切换请求。使用一个辅助窗口提高置前激活窗口的成功率。
[0054] 请参阅图3,为本发明窗口切换装置的结构示意图。本发明窗口切换装置,包括窗口记录模块301、轮询模块302和响应模块303;
[0055] 所述窗口记录模块301,用于实时判断当前系统的置前窗口是否符合预设切换条件,如果符合则将其窗口指针添加至窗口数据链表中;
[0056] 作为其中一个实施例,所述窗口记录模块301以预设时间段为周期,循环获取当前系统的置前窗口的窗口句柄;并根据获取的所述窗口句柄判断该窗口是否符合预设切换条件。
[0057] 作为其中一个实施例,所述预设时间段为20毫秒。
[0058] 窗口记录模块:系统运行时的窗口记录部分,在尽量减少系统资源占用和避免错漏窗口记录,通过判定最优时间T0间,使用线程按T0查询当前系统激活窗口,获取到窗口句柄后判断该窗口是否符合切换窗口条件F0,符合条件的窗口将窗口指针更新进窗口数据链表中。
[0059] 所述轮询模块302,用于循环读取第一列表中记录的用户的窗口切换请求,每读取到一次窗口切换请求,则从所述窗口数据链表中获取最近一次置前窗口的窗口指针;
[0060] 轮询模块使用共享锁Lock辅助线程轮询处理,如果锁Lock为锁定状态,则轮询模块只记录用户切换窗口请求到列表List1,如锁Lock为开锁状态,轮询模块初始化后启动线程按T0速度循环读取记录用户的切换窗口请求的列表List1,读取到请求,则从窗口数据链表取出上次置前激活窗口指针P,如指针P有效F1则指针发送到待响应模块待置前激活窗口列表List2,并将锁Lock锁定,否则从窗口数据链表册除此窗口指针,依次按窗口数据链表向前取上次的激活指针进行处理。
[0061] 如果获取的最近一次置前窗口的窗口指针有效,则所述轮询模块302将该窗口指针添加至第二列表中;
[0062] 作为其中一个实施例,如果获取的最近一次置前窗口的窗口指针无效,则所述轮询模块302从所述窗口数据链表中删除该窗口指针。
[0063] 作为其中一个实施例,如果获取的最近一次置前窗口的窗口指针非空,窗口属性不是隐藏状态,并且窗口大小不为零,则所述轮询模块302判断该窗口指针有效,将其添加至第二列表中。
[0064] 所述响应模块303,用于循环读取所述第二列表中的窗口指针,将相应的窗口置前。
[0065] 响应模块初始化时在用户可见显示区外生成一大小为1*1的窗口W,作为激活窗口时的辅助窗口,并设为隐藏状态。响应模块初始化时另启动线程按T0速度循环读取待置前激活窗口列表List2,如Lock状态为开锁,程序读取到请求后执行窗口置前操作P,完成后将锁Lock设为开锁状态。
[0066] 窗口置前操作P共有3部分:
[0067] 使用系统API设置窗口置前;
[0068] 如上述1设置失败,则先设置窗口W置前,再将待置前窗口用系统API执行置前激活操作;
[0069] 如待置前窗口无响应,则响应模块等待1秒钟后该窗口无法置前,则将本次切换动作请求丢弃,等待下次切换请求。
[0070] 本发明由3个部分组成,窗口记录模块,轮询模块和响应模块。其中窗口记录模块记录当前置前窗口到窗口数据链表,由轮询模块查询调用,当轮询模块接收到切换命令时,确定待切换窗口后,发送消息给响应模块实现窗口切换。
[0071] 与一般技术相比,本发明窗口切换装置可记录最近的焦点窗口,采用轮询的方法,能够分离查询线程和响应线程进行后台程序切换窗口。减少了其它系统程序对窗口切换的影响,提高了窗口切换的实时性,同时能大大提高窗口切换的成功率。
[0072] 以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明
专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干
变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附
权利要求为准。