System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种应用级检测可输入状态的方法技术_技高网

一种应用级检测可输入状态的方法技术

技术编号:39948814 阅读:7 留言:0更新日期:2024-01-08 23:08
本发明专利技术公开了一种应用级检测可输入状态的方法,编写一个注入程序,调用系统接口SetWindowsHookEx,指定WH_GETMESSAGE消息类型和要注入的dll句柄,编写一个注入dll,通过detour注入框架,注册并且自定义实现需要修改的系统接口,然后在程序调用输入法时,会自动获取到注册过的接口的调用通知回调,自定义实现ImmAssociateContextEx接口,注入dll获取可输入状态后将结果写入共享内存,将获取到的值发送给客户端,实现云端本地输入法同步功能,实现单独检测每个应用的可输入状态,而且对于不使用标准的方式设置鼠标或者插入符状态的应用也可以兼容检测到,极大提升了用户体验,能够单独检测每个应用输入可输入状态的方法,以提升云化服务的兼容性和功能体验。

【技术实现步骤摘要】

本专利技术属于应用级检测可输入状态,具体涉及一种应用级检测可输入状态的方法


技术介绍

1、在windows云桌面场景中,一般支持系统级别的输入法可输入状态检测。用户端获取到可输入通知后,可以打开本地输入法,然后同步本地输入内容到远程云桌面,提升输入体验,此类技术,有2种实现方式:1、通过getcursorinfo获取系统光标输入状态来判断;2、通过getguithreadinfo获取插入符状态来判断。

2、目前在windows云桌面中,如果某个应用没有采用标准的方式设置光标输入或者插入符状态,就会导致获取系统输入法可输入状态失败,另外如果云服务是一个多应用构架,每个应用对应一个用户,需要对每个应用都实现可输入状态检测时也不支持,降低了云化服务的兼容性和功能体验,因此我们需要提供一种应用级检测可输入状态的方法。


技术实现思路

1、本专利技术的目的在于提供一种应用级检测可输入状态的方法,可以实现单独检测每个应用的可输入状态,而且对于不使用标准的方式设置鼠标或者插入符状态的应用也可以兼容检测到,极大提升了用户体验,能够单独检测每个应用输入可输入状态的方法,以提升云化服务的兼容性和功能体验,以解决上述
技术介绍
中提出现有技术中某个应用没有采用标准的方式设置光标输入或者插入符状态,就会导致获取系统输入法可输入状态失败,另外如果云服务是一个多应用构架,每个应用对应一个用户,需要对每个应用都实现可输入状态检测时也不支持,降低了云化服务的兼容性和功能体验的问题。

2、为实现上述目的,本专利技术采用了如下技术方案:一种应用级检测可输入状态的方法,包括以下步骤:

3、步骤1:编写一个注入程序,调用系统接口setwindowshookex,指定wh_getmessage消息类型和要注入的dll句柄;

4、步骤2:编写一个注入dll,通过detour注入框架,注册并且自定义实现需要修改的系统接口,然后在程序调用输入法时,会自动获取到注册过的接口的调用通知回调;

5、步骤3:自定义实现immassociatecontextex接口;

6、步骤4:注入dll获取可输入状态后将结果写入共享内存;

7、步骤5:将获取到的值发送给客户端,实现云端本地输入法同步功能。

8、优选的,所述在步骤1中,由于windows所有事件都是消息驱动,通过监控桌面程序的消息队列,可以实现全局注入dll,其中,setwindowshookex可以指定对某一类消息进行监听,并且还能触发相应的回调函数。

9、优选的,所述setwindowshookex函数,这个函数能够实现优先拦截提交给特定窗口的信息,并进行拦截者需要的处理,然后再提交给窗口函数或是下一个钩子函数,函数第一个参数为idhook,需要设置钩子的类型。

10、优选的,所述在步骤2中,在dll中实现一个导出函数lresult callbackmessageproc(int code,wparam wparam,lparam lparam)并在其中加上callnexthookex(null,code,wparam,lparam)作为函数实现.对应的注入程序会通过getprocaddress(hooklib,"messageproc")获取dll地址然后用setwindowshookex实现注入,获取输入法接口模块地址,使用loadlibrarya("cfgmgr32.dll")。

11、优选的,在步骤3中,所述注册需要监听的函数,通过detour框架的detour_attach接口,具体定义为immassociatecontext(hwnd hwnd,himc himc)和immassociatecontextex(hwnd hwnd,himc himc,dword dwflags)函数,注册成功后,这两个函数的调用会被重定向,执行到我们实现的代码中来。

12、优选的,所述自定义实现immassociatecontext接口,当获取到immassociatecontext调用通知时,检查其参数himc,为null则代表获取到不可输入状态通知,当获取到immassociatecontext调用通知,且参数himc不为空时,则代表获取到可输入状态通知,自定义实现immassociatecontextex接口,当获取到immassociatecontextex调用通知时,检查其参数himc,为null且dwflags为iace_default(恢复窗口的默认输入法上下文)时,则代表获取到可输入状态通知,否则忽略。

13、优选的,所述detour寻路基于导航多边形(以下简称poly),因此需要先得到起点坐标和终点坐标所在的poly,通过dtnavmeshquery::findnearestpoly接口实现,detour会使用漏斗算法(也称为拉绳算法)对poly组成的路径进行处理,得到一个由坐标组成的平滑路径,看起来更加自然。

14、优选的,所述在步骤4中,建立新的导入表内存为lpnewtable,将需要注入的dll文件加入到导入表内存中,windows系统读取lpimporttable中的导入表后依次将lpimporttable中的导入表拷贝至lpnewtable中,调函数onloadimage执行返回,exe文件按照lpnewtable中的导入表加载dll文件。

15、优选的,所述加载dll文件后进入dll文件的dllmain函数,在dllmain函数内读取gdsection区段,将备份的lpbacktable的导入表取出,替换dllmain函数中gdsection区段内的导入表,完成导入表还原。

16、优选的,所述在步骤5中,服务端程序通过共享内存获取可输入状态,然后将获取到的值发送给客户端,从而实现云端本地输入法同步功能。

17、本专利技术的技术效果和优点:本专利技术提出的一种应用级检测可输入状态的方法,与现有技术相比,具有以下优点:

18、本专利技术通过编写一个注入程序,调用系统接口setwindowshookex,指定wh_getmessage消息类型和要注入的dll句柄,编写一个注入dll,通过detour注入框架,注册并且自定义实现需要修改的系统接口,然后在程序调用输入法时,会自动获取到注册过的接口的调用通知回调,自定义实现immassociatecontextex接口,注入dll获取可输入状态后将结果写入共享内存,将获取到的值发送给客户端,实现云端本地输入法同步功能。

19、本专利技术的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本专利技术而了解。本专利技术的目的和其他优点可通过在说明书以及附图中所指出的结构来实现和获得。

本文档来自技高网...

【技术保护点】

1.一种应用级检测可输入状态的方法,其特征在于:包括以下步骤:

2.根据权利要求1所述的一种应用级检测可输入状态的方法,其特征在于:所述在步骤1中,由于windows所有事件都是消息驱动,通过监控桌面程序的消息队列,可以实现全局注入dll,其中,SetWindowsHookEx可以指定对某一类消息进行监听,并且还能触发相应的回调函数。

3.根据权利要求2所述的一种应用级检测可输入状态的方法,其特征在于:所述SetWindowsHookEx函数,这个函数能够实现优先拦截提交给特定窗口的信息,并进行拦截者需要的处理,然后再提交给窗口函数或是下一个钩子函数,函数第一个参数为idHook,需要设置钩子的类型。

4.根据权利要求1所述的一种应用级检测可输入状态的方法,其特征在于:所述在步骤2中,在dll中实现一个导出函数LRESULT CALLBACK MessageProc(int code,WPARAMwParam,LPARAM lParam)并在其中加上CallNextHookEx(NULL,code,wParam,lParam)作为函数实现.对应的注入程序会通过GetProcAddress(hookLib,"MessageProc")获取dll地址然后用SetWindowsHookEx实现注入,获取输入法接口模块地址,使用LoadLibraryA("cfgmgr32.dll")。

5.根据权利要求1所述的一种应用级检测可输入状态的方法,其特征在于:在步骤3中,所述注册需要监听的函数,通过detour框架的DETOUR_ATTACH接口,具体定义为ImmAssociateContext(HWND hwnd,HIMC hIMC)和ImmAssociateContextEx(HWND hwnd,HIMC hIMC,DWORD dwFlags)函数,注册成功后,这两个函数的调用会被重定向,执行到我们实现的代码中来。

6.根据权利要求5所述的一种应用级检测可输入状态的方法,其特征在于:所述自定义实现ImmAssociateContext接口,当获取到ImmAssociateContext调用通知时,检查其参数hIMC,为NULL则代表获取到不可输入状态通知,当获取到ImmAssociateContext调用通知,且参数hIMC不为空时,则代表获取到可输入状态通知,自定义实现ImmAssociateContextEx接口,当获取到ImmAssociateContextEx调用通知时,检查其参数hIMC,为NULL且dwFlags为IACE_DEFAULT(恢复窗口的默认输入法上下文)时,则代表获取到可输入状态通知,否则忽略。

7.根据权利要求5所述的一种应用级检测可输入状态的方法,其特征在于:所述Detour寻路基于导航多边形(以下简称Poly),因此需要先得到起点坐标和终点坐标所在的Poly,通过dtNavMeshQuery::findNearestPoly接口实现,Detour会使用漏斗算法(也称为拉绳算法)对Poly组成的路径进行处理,得到一个由坐标组成的平滑路径,看起来更加自然。

8.根据权利要求1所述的一种应用级检测可输入状态的方法,其特征在于:所述在步骤4中,建立新的导入表内存为lpNewTable,将需要注入的Dll文件加入到导入表内存中,windows系统读取lpImportTable中的导入表后依次将lpImportTable中的导入表拷贝至lpNewTable中,调函数OnLoadImage执行返回,exe文件按照lpNewTable中的导入表加载Dll文件。

9.根据权利要求8所述的一种应用级检测可输入状态的方法,其特征在于:所述加载Dll文件后进入Dll文件的DllMain函数,在DllMain函数内读取gdsection区段,将备份的lpBackTable的导入表取出,替换DllMain函数中gdsection区段内的导入表,完成导入表还原。

10.根据权利要求1所述的一种应用级检测可输入状态的方法,其特征在于:所述在步骤5中,服务端程序通过共享内存获取可输入状态,然后将获取到的值发送给客户端,从而实现云端本地输入法同步功能。

...

【技术特征摘要】

1.一种应用级检测可输入状态的方法,其特征在于:包括以下步骤:

2.根据权利要求1所述的一种应用级检测可输入状态的方法,其特征在于:所述在步骤1中,由于windows所有事件都是消息驱动,通过监控桌面程序的消息队列,可以实现全局注入dll,其中,setwindowshookex可以指定对某一类消息进行监听,并且还能触发相应的回调函数。

3.根据权利要求2所述的一种应用级检测可输入状态的方法,其特征在于:所述setwindowshookex函数,这个函数能够实现优先拦截提交给特定窗口的信息,并进行拦截者需要的处理,然后再提交给窗口函数或是下一个钩子函数,函数第一个参数为idhook,需要设置钩子的类型。

4.根据权利要求1所述的一种应用级检测可输入状态的方法,其特征在于:所述在步骤2中,在dll中实现一个导出函数lresult callback messageproc(int code,wparamwparam,lparam lparam)并在其中加上callnexthookex(null,code,wparam,lparam)作为函数实现.对应的注入程序会通过getprocaddress(hooklib,"messageproc")获取dll地址然后用setwindowshookex实现注入,获取输入法接口模块地址,使用loadlibrarya("cfgmgr32.dll")。

5.根据权利要求1所述的一种应用级检测可输入状态的方法,其特征在于:在步骤3中,所述注册需要监听的函数,通过detour框架的detour_attach接口,具体定义为immassociatecontext(hwnd hwnd,himc himc)和immassociatecontextex(hwnd hwnd,himc himc,dword dwflags)函数,注册成功后,这两个函数的调用会被重定向,执行到我们实现的代码中来。

6.根据权利要求5所述的一种应用级检测可输入状态的方法,其特征在于:所述自定义实现immassociatecon...

【专利技术属性】
技术研发人员:何震高斌邹琼周双全
申请(专利权)人:深圳市瑞云科技股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1