一种设置第三方软件的热键的方法以及相关设备与流程

文档序号:29924338发布日期:2022-05-07 10:32阅读:143来源:国知局
一种设置第三方软件的热键的方法以及相关设备与流程

1.本技术涉及信息处理技术领域,尤其涉及一种设置第三方软件的热键的方法以及相关设备。


背景技术:

2.在windows系统中安装了很多第三方软件,有的第三方软件提供了丰富的热键功能,有的第三方软件又并没有提供热键功能。实际应用中,会存在以下几种情况:在没有第三方软件的源码的情况的下如何为第三方软件增加热键,或者当第三方软件提供的热键功能与系统其它软件有冲突时,如何修改第三方软件的热键功能,或者在给第三方软件增加热键时,有些第三方软件的安全性要求较高,会被误认为是病毒或者外挂程序。因此,在设置第三方软件的热键时,如何能够克服这些问题,是一个亟需解决的问题。


技术实现要素:

3.本技术实施例提供了一种设置第三方软件的热键的方法及相关设备,可以提高hook系统函数的效率。
4.本技术实施例的第一方面提供了一种设置第三方软件的热键的方法,所述方法应用于windows平台,其特征在于,包括:设计独立热键模块,以使得所述第三方软件在启动时加载所述独立热键模块,所述独立热键模块用于对所述第三方软件增加热键功能,所述独立热键模块包括导出函数,所述导出函数用于将所述独立热键模块供外部调用以及初始化;通过模板类设计定时任务的定时功能,并创建任务模板以调用所述定时功能;编写状态检测程序,设置所述状态检测程序检测热键状态的功能,并在所述状态检测程序中执行所述任务模板,以定时检测热键的状态,所述状态检测程序为独立区段代码,所述状态检测程序执行时分配动态执行内存,所述状态检测程序随所述独立热键模块一起发布;当所述第三方软件没有热键时,通过所述独立热键模块新增所述第三方软件的热键功能;通过所述状态检测程序获得所述第三方软件对应的热键状态;若所述第三方软件对应的热键状态为按下松开时,则执行所述第三方软件对应的热键的快捷操作。
5.可选地,所述设计独立热键模块,以使得所述第三方软件在启动时加载所述独立热键模块包括:编写独立的dll模块组件以得到所述独立热键模块,并设计所述独立热键模块的设置热键的功能,所述设置热键的功能包括新增热键和修改热键;通过系统函数loadlibrary()确定所述第三方软件启动后的优先加载模块;在所述优先加载模块对应的导入表项的最前面新增所述独立热键模块的导入项,所述独立热键模块的导入项包括所述独立热键模块的模块名称和所述导出函数。
6.可选地,所述设计所述独立热键模块的设置热键的功能包括:当为所述第三方软件新增热键时,所述设计独立热键模块的设置热键的功能包括:通过公式keyid=globaladdatom(_t("keyid"))-0xc000获取所述热键的唯一标识信息,所述keyid用于表示所述热键的唯一标识信息,所述keyid的合法取值的范围为0x0000~0xbfff,所述函数
globaladdatom用于获取热键标识_t("keyid");通过调用系统函数registerhotkey((handle,keyid,mod_xxx,vk_xxx)注册所述热键功能,所述handle表示接收热键产生wm_hotkey消息的窗口句柄,所述mod_xxx表示组合键的标识,所述vk_xxx表示键盘按键标识;通过系统函数lresult wind::handlemessage(uint umsg,wparam wparam,lparam lparam)设置所述热键的响应功能,所述umsg表示指定被寄送的消息,所述wparam和所述lparam用于表示指定附加的消息特定的信息,当所述umsg的消息类型为所述wm_hotkey消息时,所述参数wparam用于存储所述热键的唯一标识信息;或者,当为所述第三方软件修改热键时,所述设计独立热键模块的设置热键的功能包括:通过所述系统函数registerhotkey的参数确定所述第三方软件的当前热键;若所述当前热键与其他软件的热键存在冲突,则对所述系统函数registerhotkey进行hook并修改所述当前热键。
7.可选地,所述通过模板类设计定时任务的定时功能,并创建任务模板以调用所述定时功能包括:通过函数template《typename time,typename elapse=typename time::duration》设计所述模板类,所述time用于表示系统时钟,所述typename elapse=typename time::duration用于表示计算任务的时间间隔参数;根据所述系统时钟获取上次任务执行时间点,并设计函数执行单元,所述函数执行单元适用于所有参数类型的函数;构造函数timetask(),所述函数timetask()为显性函数,所述函数timetask()的输入参数包括所述上次任务的执行时间点和所述函数执行单元;根据所述构造函数timetask()创建任务模板timetask task(),并设置所述任务模板timetask task()的间隔预设时间长度以执行任务的功能;通过while循环实现所述任务模板timetask task()的不间断执行,并通过系统函数this_thread::yield释放任务执行结束后的cpu资源。
8.可选地,所述设置所述任务模板timetask task()的间隔预设时间长度以执行任务的功能包括:通过函数auto now=time::now()获取当前时刻,所述time为所述模板类中的系统时钟;计算所述当前时刻与上次任务执行时间点的当前任务时间间隔;若所述当前任务时间间隔大于所述预设时间间隔,则将所述当前时刻确定为当前任务的执行时刻,以实现间隔所述预设任务间隔的任务执行功能。
9.可选的,所述设置所述状态检测程序检测热键状态的功能包括:在所述动态执行内存中确定系统函数getasynckeystate()的内存地址;根据所述内存地址调用所述系统函数getasynckeystate((vk_code)&0x8000),所述系统函数getasynckeystate((vk_code)&0x8000)的返回值用于指示待测试热键是否被按下,所述vk_code用于表示待测试的虚拟键的键码,所述&0x8000用于表示所述待测试的虚拟键的键码的高位值。
10.可选的,所述在所述动态执行内存中确定系统函数getasynckeystate()的内存地址包括:通过函数getmodulehandle()确定系统函数getasynckeystate()对应的系统模块,并通过函数getprocaddress()获取所述内存地址;或,在所述独立热键模块中获取所述函数getasynckeystate()的内存地址,并将所述内存地址传递到所述动态执行内存中。
11.本技术实施例第二方面提供了一种热键设置装置,包括:设计单元,用于设计独立热键模块,以使得所述第三方软件在启动时加载所述独立热键模块,所述独立热键模块用于对所述第三方软件增加热键功能,所述独立热键模块包括导出函数,所述导出函数用于将所述独立热键模块供外部调用以及初始化;所述设计单元还用于通过模板类设计定时任务的定时功能,并创建任务模板以调用所述定时功能;所述设计单元还用于编写状态检测
程序,设置所述状态检测程序检测热键状态的功能,并在所述状态检测程序中执行所述任务模板,以定时检测热键的状态,所述状态检测程序为独立区段代码,所述状态检测程序执行时分配动态执行内存,所述状态检测程序随所述独立热键模块一起发布;新增单元,用于当所述第三方软件没有热键时,通过所述独立热键模块新增所述第三方软件的热键功能;获取单元,用于通过所述状态检测程序获得所述第三方软件对应的热键状态;执行单元,用于若所述第三方软件对应的热键状态为按下松开时,则执行所述第三方软件对应的热键的快捷操作。
12.综上所述,可以看出,本技术提供的实施例中,设计独立热键模块,以使得所述第三方软件在启动时加载所述独立热键模块,所述独立热键模块用于对所述第三方软件增加热键功能,所述独立热键模块包括导出函数,所述导出函数用于将所述独立热键模块供外部调用以及初始化;通过模板类设计定时任务的定时功能,并创建任务模板以调用所述定时功能;编写状态检测程序,设置所述状态检测程序检测热键状态的功能,并在所述状态检测程序中执行所述任务模板,以定时检测热键的状态,所述状态检测程序为独立区段代码,所述状态检测程序执行时分配动态执行内存,所述状态检测程序随所述独立热键模块一起发布;当所述第三方软件没有热键时,通过所述独立热键模块新增所述第三方软件的热键功能;通过所述状态检测程序获得所述第三方软件对应的热键状态;若所述第三方软件对应的热键状态为按下松开时,则执行所述第三方软件对应的热键的快捷操作。
13.通过本技术实施例,设计独立热键模块,以使得所述第三方软件在启动时加载所述独立热键模块,所述独立热键模块用于对所述第三方软件增加热键功能,所述独立热键模块包括导出函数,所述导出函数用于将所述独立热键模块供外部调用以及初始化;通过模板类设计定时任务的定时功能,并创建任务模板以调用所述定时功能;编写状态检测程序,设置所述状态检测程序检测热键状态的功能,并在所述状态检测程序中执行所述任务模板,以定时检测热键的状态,所述状态检测程序为独立区段代码,所述状态检测程序执行时分配动态执行内存,所述状态检测程序随所述独立热键模块一起发布;当所述第三方软件没有热键时,通过所述独立热键模块新增所述第三方软件的热键功能;通过所述状态检测程序获得所述第三方软件对应的热键状态;若所述第三方软件对应的热键状态为按下松开时,则执行所述第三方软件对应的热键的快捷操作。可以提高了热键设置的效率。
附图说明
14.图1为本技术实施例提供的一种可能的设置第三方软件的热键的方法的流程示意图;
15.图2为本技术实施例提供的一种可能的热键设置装置的实施例示意图;
16.图3为本技术实施例提供的一种可能的热键设置装置的硬件结构示意图;
17.图4为本技术实施例提供的一种可能的电子设备的实施例示意图;
18.图5为本技术实施例提供的一种可能的计算机可读存储介质的实施例示意图。
具体实施方式
19.本技术实施例提供了一种设置第三方软件的热键的方法及相关设备,可以提高热键设置的效率。
20.本技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。
21.请参阅图1,为本技术实施例提供的一种可能的设置第三方软件的热键的方法的流程图,具体包括:
22.101、设计独立热键模块,以使得第三方软件在启动时加载独立热键模块;
23.由于本方案是给第三方软件增加热键功能,因此需要设计一个独立的热键模块功能,在windows平台上则是编写一个独立的dll模块组件,方便功能的封装和复用于各个软件程序中。此独立热键模块包含了完整的解决热键的所有功能,此模块可以尽量使用更少的系统api函数,同时模块名称取名时需要更具有通用性的名称,例如help.dll,或者是类似于系统模块的名称,base.dll等。另外,此独立热键模块需要增加版本号时间戳信息,同时需要打上公司签名信息,这些措施都是避免被杀毒软件或者其他的第三方软件检测到编写的独立热键模式是一个病毒或者“外挂”功能。同时此独立热键模块需要提供一个导出函数,该导出函数用于将该独立热键模块供外部来调用,并对该独立热键模块进行初始化。
24.需要说明的是,由于本文是给第三方软件增加热键功能,独立热键模块并不会被第三方程序所加载,因此需要让第三方软件启动时加载该独立热键模块。本文可以通过对第三方程序进行逆向调试,并对系统加载模块的函数loadlibrary设置断点,其中,函数loadlibrary用于将可执行模块映射到调用进程的地址空间,是软件加载其他组件模块的必定会调用的系统接口。这样就可以知道此第三方软件启动后优先加载的是哪个组件,进而知道此第三方软件优先加载哪个模块。具体函数实现如下:
25.hmodule winapi loadlibrary(lpctstr lpfilename);
26.其中,该函数具体用于加载动态链接库到内存。hmodule用于表示返回模块句柄;lpfilename用于表示最先加载的模块名称。
27.在确定最先加载的模块后,再通过修改此模块的导入表项,并增加一个新的导入项,并且增加新的导入项时,需要将独立热键模块的导入项移动到最前面,从而保证独立热键模块的最新加载。新的导入项则是独立热键模块的名称和导出函数。例如,独立热键模块的名称为base.dll,导出函数为init,那么该独立热键模块的导入项可为base.dll init。
28.增加完导入项后,在第三方程序启动时会优先加载自身所依赖的所有组件,因此设置的独立热键模块则会第一个加载,从而执行编写的导出函数init来初始化独立热键模块的热键功能。
29.102、通过模板类设计定时任务的定时功能,并创建任务模板以调用定时功能;
30.由于本技术实施例的目的是给第三方软件增加热键功能,因此如果第三方软件有检测功能,例如是游戏程序等对安全要求比较高的程序,那么该游戏程序会检测当前是否
存在热键的功能。如果有,则认为是外挂程序或者病毒程序。因此如果使用本技术的独立热键模块来增加热键的功能,极有可能会被检测到。因此,需要提供一种可以绕过这种检测的方法。
31.本技术实施例中,可以使用系统函数getasynckeystate来检测某个热键是否被按下。需要说明的是,系统提供了getkeystate也可以获取某个按键的状态,但是该功能只能在键盘消息处理程序中使用,因为它只有在线程从消息队列中读取键盘消息时才会报告被查询键的状态。而如果想要在键盘消息处理程序之外使用,则必须使用getasynckeystate来检测。
32.本技术实施例中,为了安全采取了getasynckeystate函数,而由于getasynckeystate函数调用一次才会得到一次按键状态,因此如果要达到热键的功能,需设置一个定时任务不断的去检测热键的状态。需要说明的是,实际应用中,可以使用系统的定时器的功能,定时器到了一定时间则执行对应的任务。传统方案使用系统定时器来间隔一段时间来检测按键状态,而本技术中需要调用系统函数,并设置检测的回调函数地址。由于是在动态执行内存中执行检测功能,通过调用系统函数和传入回调函数地址不方便,另外定时器也是一个外挂常用功能,因此系统定时器被检测的风险非常大。
33.而对于定时任务的检测功能,由于是将该检测功能放到动态内存中去执行,因此希望定时任务能够每次都变化,不会留下代码特征。如果是一种代码那么其编译出来的代码是固定的,而如果是使用模板来实现此功能,则可以使得模板每次生成的代码是变化的,并且模板会依据具体的模板参数来扩展成对应的代码而不是共用同一份代码。另外,模板会将使用自己的代码全部复制到调用的地方,而非模板则是所有调用的地方都是调用函数,而原始代码只有一份。因此用模板的方式更安全。考虑到以上因素,本技术实施例则通过模板类设计定时任务的定时功能,并创建任务模板以调用定时功能,具体包括以下:
34.设计模板类。
35.通过函数template《typename time,typename elapse=typename time::duration》设计模板类,其中,time用于表示系统时钟,还可以是以后各种其他的系统时间参数等。而系统模块提供了三种时钟,包括:steady_clock,system_clock和high_resolution_clock,其中,steady_clock是单调的时钟,相当于教练手中的秒表,只会增长,适合用于记录程序耗时;system_clock是系统的时钟,因为系统的时钟可以修改,甚至可以网络对时;high_resolution_clock是当前系统能够提供的最高精度的时钟,也是不可以修改的。3种时钟里面steady_clock速度最快,其次是system_clock,最慢则是high_resolution_clock。而本文是基于任务时间差值,并不需要系统的某一个精准时刻,因此可以选择使用速度最快的steady_clock。
36.第二个模板参数typename elapse=typename time::duration,其含义表示用于计算任务的时间间隔参数类型,其中系统时间本身提供了事件差值的单位duration类型。其表示一个时间段,这样就将时间段的设置参数限定了,防止使用者传入错误数据导致程序出现问题。
37.可选的,为了防止模板参数传入错误类型,本技术实施例还提供了一种检查模板传入参数的方式,使用系统函数static_assert来检查,具体实现函数如下:
38.static_assert(time::is_steady,"错误参数");
39.需要说明的是,目前检查错误有assert还有其他的检测系统函数,本文选择使用static_assert可以在编译代码的时候就能发现错误,而对于assert或者其他检查都需要执行程序并且执行到相关语句时才能报错,这样如果开发人员使用了错误的模板参数类型,在编译代码时就能提示开发人员错误了,从而修正参数。另外,对于上述三个系统的时间参数,只有steady_clock其is_steady才是true,其他两个时间参数的is_steady都是false。
40.在设计模板类后,需要基于模板参数的time获取上次任务执行时间点,具体实现函数包括time::::time_point point,并设计函数执行单元function《void()》func,函数执行单元适用于所有参数类型的函数,其中function《void()》是一个模板类对象,任何的执行功能逻辑都可以使用此参数,可以提高对应具体的执行功能。对于是类的成员函数,还是带有不同参数个数,不同参数类型的函数都可以使用function《void()》。这样可以接纳所有的类型的执行功能。
41.再构造函数timetask(),根据构造函数timetask()创建任务模板timetask task(),并设置任务模板timetask task()的间隔预设时间长度以执行任务的功能;其中,函数timetask()为显性函数,函数timetask()的输入参数包括上次任务的执行时间点和函数执行单元;具体构造函数timetask()的实现函数如下:explicit timetask(typename time::time_point checkpoint,std::function《void()》f):point(std::move(checkpoint)),func(std::move(f){},函数其中function《void()》func用于表示函数执行单元,time::time_point checkpoint用于表示检查后的时间参数,而时间参数和函数执行体的参数,需要使用std::move来提高效率和转移生命周期。std::move的目的将一个左值强制转化为右值引用,继而可以通过右值引用使用该值,以用于移动语义。从实现上讲,std::move基本等同于一个类型转换。
42.再创建任务模板后,通过while循环实现任务模板timetask task()的间隔预设时间长度以执行任务的功能,具体实现方式如下:
43.template《typename tduration》
44.bool laptask(tduration&&amount){
45.通过提供一个模板参数tduration,参数类型是时间间隔数据,通过模板参数,可以和本文的类模板参数进行关联,从而此类不修改任何代码可以适应不同的类型时间判断。
46.通过函数auto now=time::now()获取当前的时刻,其中,time为模板类的系统时钟,此处时刻的获取是基于类的模板参数类型time来获取的,从而可以依据不同的类型时间获取不同的时刻信息。
47.if(now-point《amount){return false;}
48.根据公式now-point计算当前时刻与上次任务执行时间点的当前任务时间间隔,通过if函数判断当前任务时间间隔与预设时间间隔参数amount进行比较,如果比amount小说明当前任务时间间隔不满足预设时间间隔,反之则说明当前任务时间间隔满足要求,那么则需要通过函数point=now更新当前任务执行时刻为当前时刻,并返回true。
49.设置了任务模板的功能后,再通过while循环实现任务模板timetask task()的不间断执行,并通过系统函数this_thread::yield释放任务执行结束后的cpu资源。具体如
下:
[0050][0051]
首先检测当前任务时间间隔是否满足要求,如果满足则只执行任务。可选的,任务执行完成后,避免对cpu资源消耗过多,需要释放cpu资源。本技术实施例中,可以使用系统函数this_thread::yield来释放cpu资源。选择系统函数this_thread::yield来释放cpu资源的原因主要考虑以下几点:本技术的是间隔一段时间执行任务,而此处只有这样一个任务,所以不能使用系统的this_thread::sleep_for()函数。一旦调用了this_thread::sleep_for()函数,则这个线程会被休眠。此处并不需要等待其他任务,因此希望将cpu让出来,可以执行其他任务,提高程序的性能,因此本技术中使用this_thread::yield这个系统函数来释放cpu资源。
[0052]
103、编写状态检测程序,设置状态检测程序检测热键状态的功能,并在状态检测程序中执行任务模板,以定时检测热键的状态;
[0053]
考虑到状态检测程序的功能安全性,本技术将其独立的编写到一个区段代码中,并随着独立热键模块一起发布。编写成独立的区段后,具体执行时,则会分配一段动态执行内存,将此区段代码拷贝到动态分配的内存中。需要说明的是,使用独立区段易于此段区段代码放到分配的动态内存中,而使用动态内存来执行检测按键状态的代码的好处是,状态检测程序每次执行时申请的动态内存地址是动态变化的,从而位置没有固定性,更重要的是其不属于任何一个dll模块,从而对其hook或者查找函数调用堆栈时,其无法溯源到独立热键模块中,从而使得独立热键模块和该状态检测程序没有联系。另外,如果是模块则很容易使用枚举模块或者其他工具查看到程序加载的所有模块,而使用动态内存则无法被查找到。
[0054]
由于在动态执行内存中不能直接调用系统函数getasynckeystate,而需要通过获取系统函数getasynckeystate所属于的模块来动态获取系统函数getasynckeystate所在的内存地址,从而调用。具体则是通过getmodulehandle来获取系统模块,通过getprocaddress来获取模块中的函数内存地址。也可以通过分配动态执行内存时,首先在独立热键模块中获取系统函数getasynckeystate的地址,然后传递到动态执行内存中。具体地,使用函数getasynckeystate来检测,具体实现函数包括:getasynckeystate(vk_code)&0x8000);
[0055]
其中vk_code指需要测试的虚拟键的键码;&0x8000表示只取其高位的值,如果该值返回是是1,则是按下状态,否则松开状态。那么通过此功能函数则可以检测任意的按键是否被按下和松开。
[0056]
在设置状态检测程序检测热键状态的功能后,在该状态检测程序中执行任务模板,以定时检测热键的状态,即在task.func();中执行getasynckeystate函数来检测某个热键是否被按下松开,从而达到了热键检测的功能。其中模板类型的定时任务在使用时需要创建一个timetask task();模板会将整个功能都扩展到调用的地方。
[0057]
104、当第三方软件没有热键时,通过独立热键模块新增第三方软件的热键功能;
[0058]
本技术实施例中,对于第三方软件没有热键的情况下,可以通过在独立热键模块中编写热键功能,实现对第三方软件增加热键的功能。具体实现如下:
[0059]
步骤1、获取热键标识:通过公式keyid=globaladdatom(_t("keyid"))-0xc000获取热键的唯一标识信息,keyid用于表示热键的唯一标识信息,keyid的合法取值的范围为0x0000~0xbfff,所以减去0xc000以满足调用要求,函数globaladdatom用于获取热键标识_t("keyid");采用本公式的好处是由于keyid的合法取值的范围为0x0000~0xbfff,而通过函数globaladdatom(_t("keyid"))获取到的热键标识的值在0xc000到0xffff之间,因此可以减去0xc000来满足调用要求,即保证keyid的取值在合法范围内,否则将会产生因参数不合法而发生报错的情况。
[0060]
步骤2、注册热键功能:通过调用系统函数registerhotkey((handle,keyid,mod_xxx,vk_xxx)注册热键功能,handle表示接收热键产生wm_hotkey消息的窗口句柄,mod_xxx表示组合键的标识,vk_xxx表示键盘按键标识。例如:系统函数registerhotkey(handle,keyid,mod_alt,vk_f1),表示注册了一个alt+f1的热键。
[0061]
步骤3、设置热键响应功能,即按下热键有对应的响应;通过系统函数lresult wind::handlemessage(uint umsg,wparam wparam,lparam lparam)设置热键的响应功能,热键被触发则会调用此消息处理函数,其中uint,wparam,lparam这三种类型一般都在定义消息类型的时候用到,umsg表示指定被寄送的消息,与wparam、lparam标识指定附加的消息特定的信息。
[0062]
得到消息后,通过if函数if(umsg==wm_hotkey)对消息进行选择,即只有消息类型是wm_hotkey才是热键消息。如果是热键消息,那么参数wparam则存储了热键的keyid,这样就便于处理多个热键的情况。接下来则可以实现定制化按下某个热键达到其所对应的处理功能。
[0063]
因此,通过以上步骤,当第三方软件没有热键时,实现了通过独立热键模块新增第三方软件的热键功能。
[0064]
另外,实际应用中,还存在需要修改第三方软件的情况。即如果第三方软件本身有热键功能,而第三方软件的热键和其他软件的热键存在冲突,而需要关闭该第三方软件的某个热键功能,或者调整该第三方软件的热键设置。本技术实施例中,具体实现如下:
[0065]
通过系统函数registerhotkey的参数确定第三方软件的当前热键,一旦当前热键与其他软件的热键存在冲突,则让第三方软件的热键注册失效,就是通过对系统函数registerhotkey进行hook并修改当前热键为希望注册的热键,从而可以避免热键冲突。例如注册的是f1热键,则在hook函数中将f1热键修改成f2热键。
[0066]
因此,本技术实施例中,实现了在没有源码的情况下,希望给这些软件增加热键的功能;同时有些第三方软件提供了热键功能,但是可能和系统其它软件有冲突,需要修改该第三方软件的热键设置来避免冲突的情况。
[0067]
105、通过状态检测程序获得第三方软件对应的热键状态;
[0068]
106、若第三方软件对应的热键状态为按下松开时,则执行第三方软件对应的热键的快捷操作。
[0069]
在编写并设置状态检测程序检测热键状态的功能后,定时检测热键的状态,以获
得第三方软件对应的热键功能。
[0070]
当通过系统函数getasynckeystate(vk_code)&0x8000)检测出热键状态的功能,且第三方软件对应的热键状态为按下松开时,则执行第三方软件对应的热键的快捷操作。例如,在word文件中,同时按下ctrl+a再松开时,则执行该组热键对应的全选快捷操作。
[0071]
本技术实施例中,在没有源码的情况下,可以给第三方软件增加热键;在有些第三方软件提供了热键功能,但是与系统其它软件有冲突,且并没有提供热键配置的功能,还可以修改该第三方软件的热键设置。另外,在给第三方软件增加热键时,为避免被第三方软件检测误认为是病毒或者“外挂”程序,也安全的增加热键。
[0072]
上面对本技术实施例中设置第三方软件的热键的方法进行了描述,下面对本技术实施例中的热键设置装置进行描述。
[0073]
请参阅图2,本技术实施例中热键设置装置的一个实施例,该热键设置装置包括:
[0074]
设计单元201,用于设计独立热键模块,以使得所述第三方软件在启动时加载所述独立热键模块,所述独立热键模块用于对所述第三方软件增加热键功能,所述独立热键模块包括导出函数,所述导出函数用于将所述独立热键模块供外部调用以及初始化;
[0075]
所述设计单元201还用于通过模板类设计定时任务的定时功能,并创建任务模板以调用所述定时功能;
[0076]
所述设计单元201还用于编写状态检测程序,设置所述状态检测程序检测热键状态的功能,并在所述状态检测程序中执行所述任务模板,以定时检测热键的状态,所述状态检测程序为独立区段代码,所述状态检测程序执行时分配动态执行内存,所述状态检测程序随所述独立热键模块一起发布;
[0077]
新增单元202,用于当所述第三方软件没有热键时,通过所述独立热键模块新增所述第三方软件的热键功能;
[0078]
获取单元203,用于通过所述状态检测程序获得所述第三方软件对应的热键状态;
[0079]
执行单元204,用于若所述第三方软件对应的热键状态为按下松开时,则执行所述第三方软件对应的热键的快捷操作。
[0080]
上面图2从模块化功能实体的角度对本技术实施例中的热键设置装置进行了描述,下面从硬件处理的角度对本技术实施例中的热键设置装置进行详细描述,请参阅图3,本技术实施例中的直播间的推荐装置300一个实施例,包括:
[0081]
输入装置301、输出装置302、处理器303和存储器304(其中处理器303的数量可以一个或多个,图3中以一个处理器303为例)。在本技术的一些实施例中,输入装置301、输出装置502、处理器303和存储器304可通过总线或其它方式连接,其中,图3中以通过总线连接为例。
[0082]
其中,通过调用存储器304存储的操作指令,处理器303,用于执行如下步骤:
[0083]
设计独立热键模块,以使得所述第三方软件在启动时加载所述独立热键模块,所述独立热键模块用于对所述第三方软件增加热键功能,所述独立热键模块包括导出函数,所述导出函数用于将所述独立热键模块供外部调用以及初始化;
[0084]
通过模板类设计定时任务的定时功能,并创建任务模板以调用所述定时功能;
[0085]
编写状态检测程序,设置所述状态检测程序检测热键状态的功能,并在所述状态检测程序中执行所述任务模板,以定时检测热键的状态,所述状态检测程序为独立区段代
码,所述状态检测程序执行时分配动态执行内存,所述状态检测程序随所述独立热键模块一起发布;
[0086]
当所述第三方软件没有热键时,通过所述独立热键模块新增所述第三方软件的热键功能;
[0087]
通过所述状态检测程序获得所述第三方软件对应的热键状态;
[0088]
若所述第三方软件对应的热键状态为按下松开时,则执行所述第三方软件对应的热键的快捷操作。
[0089]
通过调用存储器304存储的操作指令,处理器303,还用于执行图1对应的实施例中的任一方式。
[0090]
请参阅图4,图4为本技术实施例提供的电子设备的实施例示意图。
[0091]
如图4所示,本技术实施例提供了一种电子设备,包括存储器410、处理器420及存储在存储器420上并可在处理器420上运行的计算机程序411,处理器420执行计算机程序411时实现以下步骤:
[0092]
设计独立热键模块,以使得所述第三方软件在启动时加载所述独立热键模块,所述独立热键模块用于对所述第三方软件增加热键功能,所述独立热键模块包括导出函数,所述导出函数用于将所述独立热键模块供外部调用以及初始化;
[0093]
通过模板类设计定时任务的定时功能,并创建任务模板以调用所述定时功能;
[0094]
编写状态检测程序,设置所述状态检测程序检测热键状态的功能,并在所述状态检测程序中执行所述任务模板,以定时检测热键的状态,所述状态检测程序为独立区段代码,所述状态检测程序执行时分配动态执行内存,所述状态检测程序随所述独立热键模块一起发布;
[0095]
当所述第三方软件没有热键时,通过所述独立热键模块新增所述第三方软件的热键功能;
[0096]
通过所述状态检测程序获得所述第三方软件对应的热键状态;
[0097]
若所述第三方软件对应的热键状态为按下松开时,则执行所述第三方软件对应的热键的快捷操作。
[0098]
在具体实施过程中,处理器420执行计算机程序411时,可以实现图1对应的实施例中任一实施方式。
[0099]
由于本实施例所介绍的电子设备为实施本技术实施例中一种热键设置装置所采用的设备,故而基于本技术实施例中所介绍的方法,本领域所属技术人员能够了解本实施例的电子设备的具体实施方式以及其各种变化形式,所以在此对于该电子设备如何实现本技术实施例中的方法不再详细介绍,只要本领域所属技术人员实施本技术实施例中的方法所采用的设备,都属于本技术所欲保护的范围。
[0100]
请参阅图5,图5为本技术实施例提供的一种计算机可读存储介质的实施例示意图。
[0101]
如图5所示,本实施例提供了一种计算机可读存储介质500,其上存储有计算机程序511,该计算机程序511被处理器执行时实现如下步骤:
[0102]
设计独立热键模块,以使得所述第三方软件在启动时加载所述独立热键模块,所述独立热键模块用于对所述第三方软件增加热键功能,所述独立热键模块包括导出函数,
所述导出函数用于将所述独立热键模块供外部调用以及初始化;
[0103]
通过模板类设计定时任务的定时功能,并创建任务模板以调用所述定时功能;
[0104]
编写状态检测程序,设置所述状态检测程序检测热键状态的功能,并在所述状态检测程序中执行所述任务模板,以定时检测热键的状态,所述状态检测程序为独立区段代码,所述状态检测程序执行时分配动态执行内存,所述状态检测程序随所述独立热键模块一起发布;
[0105]
当所述第三方软件没有热键时,通过所述独立热键模块新增所述第三方软件的热键功能;
[0106]
通过所述状态检测程序获得所述第三方软件对应的热键状态;
[0107]
若所述第三方软件对应的热键状态为按下松开时,则执行所述第三方软件对应的热键的快捷操作。
[0108]
在具体实施过程中,该计算机程序511被处理器执行时可以实现图1对应的实施例中任一实施方式。
[0109]
需要说明的是,在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详细描述的部分,可以参见其它实施例的相关描述。
[0110]
本领域内的技术人员应明白,本技术的实施例可提供为方法、系统、或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
[0111]
本技术是参照根据本技术实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式计算机或者其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0112]
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0113]
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0114]
本技术实施例还提供了一种计算机程序产品,该计算机程序产品包括计算机软件指令,当计算机软件指令在处理设备上运行时,使得处理设备执行如图1对应实施例中的风电场数字化平台设计的方法中的流程。
[0115]
所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本技术实施例所述的流程或功能。所述计算机可
以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘(solid state disk,ssd))等。
[0116]
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0117]
在本技术所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0118]
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0119]
另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0120]
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
[0121]
以上所述,以上实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修该,或者对其中部分技术特征进行等同替换;而这些修该或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的精神和范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1