易语言简易图解教程_第10章.pdf
19610.110.110.110.1 如何定义如何定义如何定义如何定义 APIAPIAPIAPI 函数函数函数函数本章学习内容本章学习内容:10.1 如何定义 API 函数10.3外部 DLL 库的应用10.2 API 函数的综合应用10.4课后练习第第第第10101010 章章APIAPIAPIAPI 函数的应用函数的应用API函数,也称DLL命令,是Windows系统外部动态链接库(即 DLL 库)中的命令。和 VB,VC 一样,易语言对 API 也有很好的支持。API 是 Windows 的基础,学会使用 API 就可以实现 Windows 绝大部分的功能。易语言中,使用一个 API 函数前(也称 DLL 命令),首先要对该函数进行定义,定义 DLL 命令涉及到以下主要属性:Dll 命令名、返回值类型、Dll 库文件名、Dll 命令在 Dll 库中对应的函数名、Dll 命令参数。197下面用一个可以取出当前所有窗口句柄的例程,来进一步了解DLL命令的定义方法和使用。添加一个列表框组件。添 加一个按钮组件,并将标题改成“列出桌面所有子窗口的窗口句柄”。198注意:注意:APIAPIAPIAPI 资料如何查找?资料如何查找?Windos 中的 DLL 命令有很多,网上也有许多 API 的资料包括帮助文档,列出了常用的 API 函数。使用 API 之前,可以先上网下载一个 API 帮助文档。下面会用到 1 个 DLL 命令:FindWindowExA,这个命令可以在窗口列表中寻找与指定条件相符的第一个子窗口。新建一个 DLL 命令。DLL 命令名:指定 DLL 命令在易语言中使用时的名称,可以自定义,最好是选一个方便识别的名称。DLL 库文件名:DLL 命令所在的DLL库文件名。按照API资料来填写,不可以自定义。在 DLL 库中对应文件名:与上边“DLL命令名”所指定的 DLL 命令对应的 DLL 库文件中相应的 API 函数名(即 API 函数的原名)。按照 API 资料来填写,不可以自定义。API 资料中描述的,有几个参数,就添加几个参数,并且各参数的类型和位置要和资料中的相一臻,但参数名可以自定义。199这 里有四个参数的类型与说明。从 API 的帮助文 件 里 可 以 查 出User32 是 DLL 库文件名,FindWindowExA 是API 函数原名。双击按钮,在“_按钮 1_被单击”事件子程序中输入如下代码:列表框 1.清空()hWnd 取子窗口句柄(0,0,0,0)判断循环首(hWnd 0)列表框 1.加入项目(到文本(hWnd),)hWnd 取子窗口句柄(0,hWnd,0,0)判断循环尾()新建一个整数型的变量。用判断循环首命令,循环取出当前所有子窗口的窗口句柄。20010.210.210.210.2APIAPIAPIAPI 函数的综合应用函数的综合应用函数的综合应用函数的综合应用按 下 F5键运行程序,点击按钮后,列 表框 就列出 了所 有子窗 口的 窗口句柄了。本例程中用到了 3 个 DLL 命令,分别是:GetWindowLong:从指定窗口的结构中取得信息。SetWindowLong:在窗口结构中为指定的窗口设置信息。SetLayeredWindowAttributes:设置窗体的透明色。用 API 函数,可以实现很多特殊的效果,下面练习用 3 个 DLL 命令实现窗体的透明效果。201添加一个滑块条组件。将滑块条的刻度类型属性设置成“下/右”。对 这 3 个DLL命令进行定义。202如 果 库 文 件 名 是:Kernel32.dll、Gdi32.dll、User32.dll、Mpr.dll、Advapi32.dll,填写时可以省略,系统会自动搜索。注意:注意:APIAPIAPIAPI 函数中常量的使用函数中常量的使用使用 DLL 命令时,会有一些参数用到 API 中的常量,这些常量可以使用 API常量查询工具查找,并在易语言中使用自定义常量进行定义,使用时可以用常量名(记得在常量名前加上“#”号),也可以直接将常量值添入参数中。双击“_启动窗口”,产生“_启动窗口_创建完毕”事件子程序,然后新建一个整数型变量 Ret。在子程序下输入代码:Ret GetWindowLong(取窗口句柄(),-20)Ret 位或(Ret,524288)SetWindowLong(取窗口句柄(),-20,Ret)SetLayeredWindowAttributes(_启动窗口.取窗口句柄(),0,255,#LWA_ALPHA)203在滑块条的事件列表中选择“位置被改变”事件,产生“_滑块条 1_位置被改变”事件子程序。在子程序下输入代码:SetLayeredWindowAttributes(_启动窗口.取窗口句柄(),0,滑块条 1.位置,#LWA_ALPHA)运行程序,然后拖动滑块条,可以看到,窗体渐渐变的透明,直到完全透明。20410.310.310.310.3 外部外部外部外部 DLLDLLDLLDLL 库的应用库的应用库的应用库的应用前2节都是介绍基本 Windows API 库文件,但API的使用方法多种多样,不但可以使用 Windows 自带的 DLL 命令,而且可以使用外部的 DLL 库中的DLL 命令,本节就使用一个外部的 DLL 库,来做一个水纹特效。新建一个易程序,然后,添加一个时钟组件。注意:注意:该例程要使用到一个外部的 DLL 库,所以,在编写程序前,先从随书光盘中将 WaterDll.dll 文件拷贝到本地机器上,并一同将随书光盘中的“例图 01.bmp”拷贝到程序所在的目录下。205本例程要用到 2 个默认 DLL 库中的命令,和 3 个外部 DLL 库中的命令。2 个 user32.dll 中的命令:GetDC:获取指定窗口的设备场景LoadImage:载入一个位图、图标或指针3 个 WaterDll.dll 中的命令(外部 DLL 库):外部 DLL 库中的命令使用方法,参见外部 DLL 库自带的帮助文档,没有帮助文档也可参见例程,或在实际使用的时候给命令参数不同的值看看出现的效果,自己理解 DLL 库中命令的作用。定 义 默 认DLL 库中的命令。206 定 义 外 部DLL 库中的命令。由于是外部 DLL库,所以,DLL 库文件名要填写清楚。命令 中各参 数可以照书中填写,各参数的作用,可以编写完程序后,更改参数的值,进行调试,就可以了解命令中的各个参数了。207双击“_启动窗口”产生了“_启动窗口_创建完毕”事件子程序,并新建一个整数型变量“bitmap”。用来存放 LoadImage 命令的返回值。在“_启动窗口_创建完毕”事件子程序中输入如下代码:时钟 1.时钟周期 10bitmap LoadImage(0,取 运 行 目 录()“例 图 01.bmp”,0,0,0,#LR_LOADFROMFILE)WaterInit(bitmap)16是常量#LR_LOADFROMFILE 的 常 量值,使用常量查询工具查出。双击时钟组件,在“_时钟 1_周期事件”事件子程序下输入如下代码:WaterTimer(GetDC(_启动窗口.取窗口句柄(),0,0)在启动窗口的事件选择列表框中选择“鼠标位置被移动”选项,在“_启动窗口_鼠标位置被移动”事件子程序下输入如下代码:WaterMouseAction(GetDC(_启动窗口.取窗口句柄(),0,0,横向位置,纵向位置,5,100)将子程序的返回值设置成“逻辑型”。20810.410.410.410.4 课后练习课后练习课后练习课后练习(1)学着使用 API 函数的帮助文档:运行程序,然后在窗体上移动鼠标,就可以看到逼真的水纹效果了。209(2)使用简单的 API,制作一个模拟键盘按下“Win 键+D”,和模拟鼠标移动的程序。这 里 是 DLL声明,分别声明模拟键盘与模拟鼠标 移 动 的 两 个DLL 命令。在“_启动窗口”中添加两个按钮,分别双击按钮组件,以进入被单击事件子程序,并输入程序代码。最后按 F5 键运行程序,看看效果。提示:GetMessagePos:模拟鼠标移动;keybd_event:模拟键盘按下。