点击下载本节源代码
热键与窗口组件的句柄,标题,类名
热键是什么呢?比如QQ上收到了有信息时,按下 Ctrl + Alt + Z 时会弹出新的聊天对话框。这里的 Ctrl + Alt + Z 一按,不管你当时是在做什么,都会弹出那个QQ聊天框的组合按键,就叫做热键
由此可见,热键就是属于那种,不管你在任何的软件上做什么事务,只要一按下曾经注册过的那组按键,系统就会去调用被注册热键时指定的子程序代码来执行.
但要注意,某个组合的热键已被注册过,在其未卸载之前,不能再次被注册或之前注册的会失效,所以某种组合按键的热键一旦注册成功,就是唯一性的.直到被卸载或该宿主程序终止为止.
下面我们来设计一个简单的热键程序,源代码见本节第一例

程序界面布局

注册热键示例代码.
任何时候我们在写代码时当需要使用某个函数命令,就该先看看该函数的功能与参数说明.不看说明只会多犯代码错误又加重了后期纠错麻烦.
例如上面的代码中 注册热键程序() 与 卸载热键() 还有 信息框() 可以在代码编辑器里点击这三个函数后按F1,看到简单的说明,下面的提示里有更详细的说明.
子程序名:注册热键程序 注册一个不与任何窗口关联的热键功能,成功=热键ID,供 卸载热键() 使用 返回值类型:整数型 参数<1>的名称为“功能键”,类型为“整数型”。注明:0=无功能键,Alt=1,Ctrl=2,Shift=4。 参数<2>的名称为“主热键”,类型为“整数型”。注明:键盘某虚拟键码 例 #HOME键。 参数<3>的名称为“热键接口”,类型为“子程序指针”。注明:〈无返回值〉 热键接口 ()。
子程序名:卸载热键 卸载掉 注册热键程序() 时的热键 参数<1>的名称为“热键ID”,类型为“整数型”。注明:-1=卸载所有热键。
子程序名:信息框 弹出一个信息提示窗口,与易核心库的信息框用法一致 返回值类型:整数型 参数<1>的名称为“信息文本”,类型为“文本型”。 参数<2>的名称为“标志组合”,类型为“整数型”,允许接收空参数数据。 参数<3>的名称为“窗口标题”,类型为“文本型”,允许接收空参数数据。 参数<4>的名称为“父句柄”,类型为“整数型”,允许接收空参数数据。
热键的编写如上面的代码,然后可以调试或编译成EXE文运行,试试按下 Ctrl + Alt + Q 会有什么反应,还有按 Home 这个键又有什么反应,如果什么反应都没有话,看看代码上有没有错误,或到万挂作坊网站上,下载最新版的模块来用
上面的代码对于热键进行了初步的讲解,不是很明白的话不要紧,用多了后自然会明白的.
再来讲解窗口句柄
在上面的信息框里,我们用到了一个 _启动窗口.取窗口句柄() 窗口句柄是什么是很重要的,在万挂的编程中,离不开这个窗口句柄,事实上,除了这个窗口句柄外,还有一大堆的各种各样的句柄。
窗口句柄是一个整数型值,占用4字节内存,所以可以用整数型变量来存放 窗口句柄,
窗口句柄的作用是用来标识某个窗口窗体或控件用的,可以通过这个句柄对那个窗口进行各种的操作与调整。万挂就是要来控置与操作游戏,所以离不开这个窗口句柄
窗口句柄在有效时间是在某个窗口或控件初始创建时被系统分配的,直到这个控件或窗口被销毁后,窗口句柄才会失效
每个控件在创建时被分配的窗口句柄都是随机的,也就是说,一个软件,这次运行时他的主窗口句柄,与下次运行时的是不同的。
一个窗口句柄只能标识一个控件,不会出现两个相同的句柄来标识两个不同的控件
上面对于窗口句柄这个概念进行了初步的讲解,可能有些模糊,下面我们就来实际应用一下,实践才是真理
再来设计一个程序,源代码见本节第二例

示例程序界面布局

取窗口句柄代码.
从上例我们了解到,窗口句柄是随机分配的,且一旦被分配后在该控件的生存期内会一直有效不变,同时,不管是窗口本身还是窗口上的控件,不管是可视的或隐藏的,也可以是被禁止或只读的,统统都有他们的句柄
上例所显示出的句柄,是用易语言里的 取窗口句柄() 得到的,这回我们再去试试,从别的软件上得到它的窗口句柄.
上面有提到,可以通过窗口句柄,控制和操作游戏软件或其它别人的软件,前提还是先取到那个软件的窗口或控件现在句柄。有了正确的句柄,才能进行操作。
其实,一个窗口或控件,它除了有句柄外,还有其它的一些属性,如,窗口的标题,类名,内容,位置与大小等等信息
windows操作系统虽然可以同时运行多个软件,但是每次只能有一个软件来接受用户的输入,正接受用户输入操作的称为焦点控件,该焦点控件所在的窗口称为活动窗口.
下面,我们来设计第三个例子,获取当前正处于活动状态的窗口的窗口句柄,并且得到这个窗口的标题与类名信息

运行该例子,然后切换变点到计算器上,按 HOME 热键可看到取出的各窗口句柄及其标题和类名属性
提醒,模块中有多种命令可以获取活动窗口句柄.对于窗口可以用取窗口标题(),但对于控件建议使用取控件内容().
从第三例中,我们明白了,一个窗口或者控件,他们的类名是基本不变的,即使重启这个软件也不会变,但对于窗口的标题或控件的内容,很多的软件是可以在运行阶段中使用代码去改变的或被其它的软件修改掉的,而窗口句柄,是每次在被创建时由系统分配的,无法改变,只有重启软件才会变。
其实呢,通过用句柄可以得到该窗口或控件的标题,类名或内容,同时的,也可以根据一个窗口的标题,类名或内容找出这个窗口控件的句柄。但有一点需要清楚的是,如果有两个窗口,他们的标题类名相同的话,那你,一次只能获取一个窗口的句柄,下次才能再获取到另一个窗口的句柄,需要另外加以分析,判断出哪个句柄是对应哪个窗口的才行
第四例界面如下,源代码见本节第四例


演示 取窗体句柄() 查找窗口() 枚举窗口() 这三个函数的简单用法.
对于单开的游戏,可以使用 取窗体句柄(类名,标题) 来获取其窗口的句柄,更多时间建议使用 查找窗口() 例如对于多开的窗口或还要获取其窗口内部的控件句柄,则需得借助 查找窗口(父句柄,起始句柄,类名,标题) 这个功能了,使用查找窗口这个功能时,需要注意其第二个参数起始句柄的值。
另外,从上面的例子,还了解到了,原来在使用函数时,函数中的有些参数被 [] 括号括起来的被称为可空参数,可空参数也就是可以省略的参数。
如 取窗体句柄([类名],[标题]) 该函数共有两个参数,同时两个参数都是可空可省略的
例.想要两个参数都省略可以编写如下代码
取窗体句柄() 或 取窗体句柄( , )
例.想要省略第二参数,提供第一参数时
取窗体句柄(窗口类名) 或 取窗体句柄(窗口类名, )
例.想要省略第一个参数只使用第二参数时,注意这里使用了 , 号把第一参数与第二参数进行分隔
取窗体句柄( , 窗口的标题)
例.两个参数都使用时,与平时的其它函数用法一致
取窗体句柄(窗口类名,窗口标题)
另外这里使用到了 枚举窗口() 的参数一要提供的是易语言子程序指针,这里称为回调接口,在万挂作坊模块中,很多功能都有这种回调接口要求.有关更详细的说明以后会再介绍.
子程序名:枚举窗口 返回值类型:逻辑型 参数<1>的名称为“枚举窗口接口”,类型为“子程序指针”。注明:〈逻辑型〉 枚举窗口接口 (整数型 窗口句柄) 真=继续枚举,假=结束枚举。 参数<2>的名称为“线程ID”,类型为“整数型”,允许接收空参数数据。注明:空=枚举系统所有顶级窗口,非空=枚举该线程的所有顶级窗口。
点击下载本节源代码
本节共分为四例,简单讲解了热键的用法,与窗口句柄概念.可以通过窗口的某些属性,例如标题与类名来得到其窗口句柄,也能通过一个窗口句柄而得到其标题与类名的属性.
注意. 有些用来获取窗口句柄的函数,若返回窗口句柄=0时,代表获取窗口句柄失败...同时若参数项窗口句柄指定为0时代表屏幕句柄
本节的内容是比较基础级的,却又必需得掌握,因为万挂方面的技术时时刻刻的与句柄打交道.
本章为初级入门教程,学完后,就能设计出按键精灵,脚本大师这类的动作模拟万挂功能
自本章起,以后的章节内容都是以操作系统上的一些的知识与原理的讲解,对于编程技巧方面会减少,换句话来说,做万挂,与编程的技术关系得并不大,一般只要会初级的编程技术就够了,当然,对编程越精通是越好的,呵呵……
大家可以看看教材配套的源代码,运行观察其结果,了解一下吧。如果,运行后有些功能没有效果或没有反应的话,得到万挂作坊网站,重新下载最新版的 万挂作坊 模块
|