易易语言图解教程 第10章API函数的应用 AI函数,也称DLL命令,是 Windows 系统外部动态连接库(即DLL库)中的 命令。和VB,VC一样,易语言对API也 有很好的支持。API是 Windows的基础, 学会使用API就可以实现 Windows绝大 部分的功能。 本章学习内容: 10.1如何定义API函数10.3外部DLL库的应用 10.2API函数的综合应用10.4课后练习 10.1如何定义API函数 易语言中,使用一个API函数前(也称DLL命令),首先要对该函数进 行定义,定义DLL命令涉及到以下主要属性: D11命令名、返回值类型、D11库文件名、D11命令在D11库中的对应 命令名、D11命令参数。 196
196 10.1 如何定义 API 函数 本章学习内容: 10.1 如何定义 API 函数 10.3 外部 DLL 库的应用 10.2 API 函数的综合应用 10.4 课后练习 第 10 章 API 函数的应用 API 函数,也称 DLL 命令,是 Windows 系统外部动态连接库(即 DLL 库)中的 命令。和 VB,VC 一样,易语言对 API 也 有很好的支持。API 是 Windows 的基础, 学会使用 API 就可以实现 Windows 绝大 部分的功能。 易语言中,使用一个 API 函数前(也称 DLL 命令),首先要对该函数进 行定义,定义 DLL 命令涉及到以下主要属性: Dll 命令名、返回值类型、Dll 库文件名、Dll 命令在 Dll 库中的对应 命令名、Dll 命令参数
一第1章AB函数的应用 易话言- Windows窗口程序-[D11命令定义表 「E程序E情Y查着1甄入数1调试B运行1工具窗口E帮助 程序数据 I命令1 m库文件名 在库中对应命令名 匚夢效名卖传址数备注」 国程序黑性,口 行:1列:1 下面用一个可以取出当前 所有的窗口句柄的例程,来进 一步了解DLL命令的定义方法 和使用。 雳易语言一E:tepV7《+天学会易语言固解教程》\第10章AP应用例程\A简单例程之一枚举所…□回区 囫E程序E编辑y查着工折入B数据库卫调试B运行工工具重窗口帮助 国固电的Cm日田”,“ 手护出雪p 简单例程之。枚举所有千窗口min 基本组 一个按钮组程序 出桌面所有子窗口的窗口句柄 件,将标 國 题改成“列 字_F 出桌面所有 图sy 子窗目的窗 当 口句柄 园 片平铺 景音乐 ②拉出一个列表框组件 外部组 女持库回程序羅性「 外部事件组件 197
197 下面用一个可以取出当前 所有的窗口句柄的例程,来进 一步了解DLL命令的定义方法 和使用。 ②拉出一个列表框组件。 ① 拉 出 一个按钮组 件,并将标 题改成“列 出桌面所有 子窗口的窗 口句柄
一囫一易语言图解教程一 注意:API资料如何查找? Windos中的DLL命令有很多,网上也有许多API的帮助文件,列出了常用的 API令的相关资料。使用API之前,可以先上网下载一个API的帮助文档 下面会用到1个DLL命令: Find windowExA,这个命令可以在窗口列表中 寻找与指定条件相符的第一个子窗口 ④新建一个DLL命令 定义DLL命令在易语言 中使用的命令名,可以随意定 m命令名 义,最好是定义一个方便识别 取子窗口句柄 的命令名 m1库文件名 user32 定义DLL库文件名。按照 在m库中对应命令名 API资料中填写,不可以自定 Findwindow ExA 参数名类型传址」数组注1 整数型 整数型 「整 数型 定义DLL库中对应的命 Ipsa 人数型 令名。按照API资料中填写, 不可以自定义。 API资料中描述的,有几个参 数,就添加几个参数,并且参数的 类型要和资料中的符合,参数名可 以自定义。 198
198 注意:API 资料如何查找? Windos 中的 DLL 命令有很多,网上也有许多 API 的帮助文件,列出了常用的 API 令的相关资料。使用 API 之前,可以先上网下载一个 API 的帮助文档。 下面会用到 1 个 DLL 命令:FindWindowExA,这个命令可以在窗口列表中 寻找与指定条件相符的第一个子窗口。 ④新建一个 DLL 命令。 定义 DLL 命令在易语言 中使用的命令名,可以随意定 义,最好是定义一个方便识别 的命令名 定义 DLL 库文件名。按照 API 资料中填写,不可以自定 义。 定义 DLL 库中对应的命 令名。按照 API 资料中填写, 不可以自定义。 API 资料中描述的,有几个参 数,就添加几个参数,并且参数的 类型要和资料中的符合,参数名可 以自定义
一第1章AB函数的应用 从API的帮 助文件里可以查 目录c)索引 出User32是DLL indyindoNEx 库文件名 clare Function Findwindow E Libuser32 Aias Window=消息函数 indYindowExA" (yVal hindI As Long, ByVal hYnde As Lor FindwindowEx Byval lps:2 As 是库命令名 在窗口列表中寻找与指定条件相符的第一个子窗口 返回值 La找的蜜口的句,如未找到符窗口,则回零,会设置 hAndl 真后t吾(案找子的要日非浅为真不字里 口,所以也会对它们进行查我 Lng,从这个窗口后开始查找。这样使可利 这里 口,如设为零,表示从第一个子窗口开始搜索 有四个参 String,欲搜来的类名,零表示沼略 String,欲搜来的类名。零表示忽略 数的类型 GetClassLong 与说明 ⑥双击按钮,在按钮1被单击的子程序下输入代码: 列表框1清空0 hWnd=取子窗口句柄(0,0,0,0) 判断循环首(hWnd≠0) ⑤新建一个整 列表框1加入项目(到文本(hWnd),) 数型的变量。 hWnd=取子窗口句柄(0,hWnd,0,0) 判断循环尾0 「返回值类型公开备注 按钮单击 变量名类型」静态数组|备注 Mnd整数型 列表框1.清空0 h"nd=取子窗口句柄0,0,0,0) 用判断循环 母判断循环首0nd≠0) 首命令,循环取 列表框1加入项目倒文本Q"nd,) 出当前所有子窗 =取子窗口句柄(,hnd,0,0) 口的窗口句柄 判断循环尾0 199
199 这 里 有四个参 数的类型 与说明。 从 API 的帮 助文件里可以查 出 User32 是 DLL 库 文 件 名 , FindWindowExA 是库命令名。 ⑥双击按钮,在_按钮 1_被单击的子程序下输入代码: 列表框 1.清空 () hWnd = 取子窗口句柄 (0, 0, 0, 0) 判断循环首 (hWnd ≠ 0) 列表框 1.加入项目 (到文本 (hWnd), ) hWnd = 取子窗口句柄 (0, hWnd, 0, 0) 判断循环尾 () ⑤新建一个整 数型的变量。 用判断循环 首命令,循环取 出当前所有子窗 口的窗口句柄
一囫一易语言图解教程一 易ApI简单例程之-枚举所有子窗口〔Find 按下 列出桌面所有子窗口的面口句柄 键试运行,点 击按钮后,列 表框就列出 65680 了所有子窗 的窗口句 131180 柄了。 197626 1246248 2294912 1180680 1246022 10.2AP函数的综合应用 用API函数,可以实现 很多特殊的效果,下面练习 用3个DLL命令实现窗体的 透明效果。 用到了3个DLL命令,分别是 Get WindowLong:从指定窗口的结构中取得信息 Setwindowlong:在窗口结构中为指定的窗口设置信息 SetLayered WindowAttributes:设置窗体的透明色 200
200 10.2 API 函数的综合应用 按下 F5 键试运行,点 击按钮后,列 表框就列出 了所有子窗 口的窗口句 柄了。 用到了 3 个 DLL 命令,分别是: GetWindowLong:从指定窗口的结构中取得信息。 SetWindowLong:在窗口结构中为指定的窗口设置信息。 SetLayeredWindowAttributes:设置窗体的透明色。 用 API 函数,可以实现 很多特殊的效果,下面练习 用 3 个 DLL 命令实现窗体的 透明效果
第10章AB函数的应朋口 天会易言解)第①拉出一个滑回网 E程序E阙辑y查看工入B数据库卫调试B运行I工具 「画已国x电的,m日m”。[块条组件 潘块条1(看块条) ApI问单例程之-透明效果 基本件 默认型 国国 当自國 刻度类型下/右 ②将滑块条的 口回国 刻度类型属性设 置成“下/右 在此处选择加入事件处理子程序 空持国程序性∫ m命令名返回值类型 备注 Setwindowlong整数型 ③对这3个 m1库文件名 DLL命令进行定 在m库中对应命令名 SetWindow longA 参数名类型传址数组备注 hwnd 数型 nIndex 整数型 4 HerLong整数型 m命令名 返回值类型 备注 SetLayeredWindowAttributes整数型 m库文件名 在m库中对应命令名 参数名 类型传址数组备注 hwnd 整数型 整数型 bAlpha 整数型 daRla 整数型 201
201 ①拉出一个滑 块条组件。 ②将滑块条的 刻度类型属性设 置成“下/右”。 ③对这 3 个 DLL 命令进行定 义
一囫一易语言图解教程一 m命令名返回值类型 备注 etwindowLong整数型 m库文件名 ③如果库文件名是: 在1库中对应命令名 Kernel32. dll, Gdi32. dll tWindowLongA User32.dll、Mpr.dl1 参数名 类 型传址数组备 Advani32.dll填写时可以省 hwnd 整数型 略,系统会自动搜索。 IIndex 整数型 ②注意:AP函数中常量的使用 使用DLL命令时,会有一些参数用到了AP1中的常量值,这些常量值可以使 用APⅠ常量查询工具查找,并在易语言中使用自定义常量,进行定义,也可以直 接将常量值添入参数中 ④双击启动窗口,产生启动窗口创建完毕 子程序,然后新建一个整数型的变量“Ret” 子程序 返回值类型公开 备注 启动窗口创华 变量名类型静态数组备注 Ret= GetWindowLong(取窗口句柄0,-20) Ret=位或Ret,524288) SetwindowLong(取窗口句柄0,-20,Ret) SetLayerednindowAttri butes(启动窗口取窗口句柄O,0,255# LWA ALPHA) ⑤在子程序下输入代码 et= GetWindowLong(取窗口句柄0,-20) Ret=位或(Ret,524288) SetWindowLong(取窗口句柄0,-20,Ret) SetLayeredWindow Attributes启动窗口取窗口句柄0.0,255,# LWA ALPHA 202
202 如 果 库 文 件 名 是 : Kernel32.dll、Gdi32.dll、 User32.dll 、 Mpr.dll 、 Advapi32.dll 填写时可以省 略,系统会自动搜索。 注意:API 函数中常量的使用 使用 DLL 命令时,会有一些参数用到了 API 中的常量值,这些常量值可以使 用 API 常量查询工具查找,并在易语言中使用自定义常量,进行定义,也可以直 接将常量值添入参数中。 ④双击_启动窗口,产生_启动窗口_创建完毕 子程序,然后新建一个整数型的变量“Ret” ⑤在子程序下输入代码: Ret = GetWindowLong (取窗口句柄 (), -20) Ret = 位或 (Ret, 524288) SetWindowLong (取窗口句柄 (), -20, Ret) SetLayeredWindowAttributes (_启动窗口.取窗口句柄 (), 0, 255, #LWA_ALPHA)
一第1章AB函数的应用 ⑥在滑块条的事件列表中选择“位置被改变”事件, 产生“滑块条1位置被改变”子程序。 子程序名 返回值类型公开 备注 滑块条1位置被改变 SetLayeredWindowAttributes〔启动窗口取窗口句柄O,0,滑块条1.位置,机智 A ALPHA) ⑦在子程序下输入代码: SetLayeredWindow Attributes(启动窗口.取窗口句柄0,0,滑块条1.位置 #LWA_ ALPHA) 运行程序,然后拖动滑块条,可以看到,窗体渐渐 变的透明,直到完全透明。 E:\temp\7 5学会易语言图解教程》1第10章-API应用1例程\Ap 「E程序飞编错Y查减王入数1调式运行工工具王留口帮助 窗口程序集名 备注 启动售囗〔窗囗 口程序集1 在程序启动后E 子程序名 返回值类型公开 启动窗囗创建完毕 量名英型静态数组备注 理窗口句柄0,-20) b(启动窗囗取窗囗句柄0.0.25.机 团片平铺 滑块条1位置被改变 在此处选择加入事件处理子程序 etLayeredindowAttributes C启动窗口取窗口句柄O,0.滑块条1.位 #LYA ALPHA) 效库量释账 203
203 ⑥在滑块条的事件列表中选择“位置被改变”事件, 产生“_滑块条 1_位置被改变”子程序。 ⑦在子程序下输入代码: SetLayeredWindowAttributes (_ 启动窗口. 取 窗 口 句 柄 (), 0, 滑块条 1. 位 置 , #LWA_ALPHA) 运行程序,然后拖动滑块条,可以看到,窗体渐渐 变的透明,直到完全透明
一囫一易语言图解教程一 10.3外部DLL库的应用 前2节都是介绍基本 Windows apl库文件,但AP的使用方法多种多样, 不但可以使用 Windows自带的DL命令,而且可以使用外部的DLL库中的 DL命令,本节就使用一个外部的DLL库,来做一个水纹特效 荡易语言一E:1temp17《十天学会易语言图解教程》第10李一AFI应用例程\水纹特效。-indv窗口程回回区 E程序辆福Y查看抵入基数据库1雨试基运行【工具t基帮助 国它圖》自cm巴田”。 「國的固 基本组件 自定义数类型 [的因 ②□字 国国 seAction 国业 扩展组伴 外部组伴 外部事件泪件 如峡红浙建个易程序,繁然后,添个时钟组中6, 注意: 该例程要使用到一个外部的DLL库,所以,在编写程序前,先从随书光盘中 将 WaterDdild文件拷贝到本地机器上,并一同将随书光盘中的“例图01bmp”拷 贝到程序保存到的目录下。 204
204 10.3 外部 DLL 库的应用 前2节都是介绍基本 Windows API 库文件,但API 的使用方法多种多样, 不但可以使用 Windows 自带的 DLL 命令,而且可以使用外部的 DLL 库中的 DLL 命令,本节就使用一个外部的 DLL 库,来做一个水纹特效。 ①新建一个易程序,然后,添加一个时钟组件。 注意: 该例程要使用到一个外部的 DLL 库,所以,在编写程序前,先从随书光盘中 将 WaterDll.dll 文件拷贝到本地机器上,并一同将随书光盘中的“例图 01.bmp”拷 贝到程序保存到的目录下
一第1章AB函数的应用 本例程要用到2个默认DLL库中的命令,和3个外部DLL库中的命令 2个uer32d中的命令: GetDC:获取指定窗口的设备场景 载入一个位图、图标或指针 3个 Water. dll中的命令(外部DLL库) 外部DL库中的命令使用方法,参见外部DLL库自带的帮助文档,没 有帮助文档也可参见例程,或在实际使用的时候给命令参数不同的值看看出 现的效果,自己理解DL库中命令的作用 m命令名返回值类型 备注 GetDC 整数型 m库文件名 在库中对应命令名 etDC 参数名类型传址数组|备注 ②定义默认 hwnd 整数型 DLL库中的命令。 ⑩命令名返回值类型备注 LoadImage整数型 m库文件名 在m库中对应命令名 参数名类型传址数组备注 hInst 整数型 整数型 整数型 整数型 整数型 205
205 本例程要用到 2 个默认 DLL 库中的命令,和 3 个外部 DLL 库中的命令。 2 个 user32.dll 中的命令: GetDC:获取指定窗口的设备场景 LoadImage:载入一个位图、图标或指针 3 个 WaterDll.dll 中的命令(外部 DLL 库): 外部 DLL 库中的命令使用方法,参见外部 DLL 库自带的帮助文档,没 有帮助文档也可参见例程,或在实际使用的时候给命令参数不同的值看看出 现的效果,自己理解 DLL 库中命令的作用。 ② 定义默认 DLL 库中的命令