开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 3921|回复: 6
收起左侧

[图文资料] 易语言:通俗API使用教程

[复制链接]
发表于 2011-4-20 15:14:54 | 显示全部楼层 |阅读模式   河北省保定市
无意看到觉得不错转来的

什么叫API?
API全称为Application Programming Intererface,直译的话可叫它“应用程序接口”。它是Windows开放给程序员的编程接口,使得在用户级别下可以对操作系统进行控制,也就是一般的应用程序都需要调用API来完成某些功能,API说到底就是一系列的函数,我们可以把它理解为程序的子程序或子过程,只不过它是系统本身提供给用户在进行高级编程中供其程序使用。

API能做什么?它起什么作用?
我们编写的程序通过调用它来达到操作系统的目地,它是系统提供给我们的编程接口,一个很经典的例子就是我们要通过调用API函数ExitWindowsEx来关闭系统,它还为各编程语言间的融会贯通架起了桥梁.

我怎样才知道我要的功能可以用某个API实现?
当你要实现的功能与系统的功能有关时都尽量假设可以用API办到,首先你要知道一些常用的API的功能,下面有提供一个API的文档,你可以浏览地看一下,以后程序要实现某功能你可以在里面找,另外,互联网上是一个无限的知识库,你可以问百度(www.baidu.com),问Google,另外微软还提供了一个知识库叫"MSDN",你也可以查看,具体你可以在网上搜下看.

在易中我该怎么使用API?
要全面了解和使用API,我们先应该了解下动态链接库(DLL)的调用机制,因为API其实就是封装在DLL里面的一系列的函数;了解DLL调用机制的最好办法是就是我们自己写个DLL然后我们再在自己的程序中调用,说做就做,不知道你有没有用过易写过DLL,没有也没关系,我们来练习一下:打开易语言,新建一"动态链接库",我们单击右键新建一个子程序,起名叫"MyAPI"改好名字后,在名字编辑框里"回车"3下,这样就添加了3个空白参数,参数名和类型等可以按自己的实际需要填写,最后说明一下,如果你要外面的程序可以调用,一定要把"公开"勾上,下面是我的示例代码:
  1. ==============================
  2. .版本 2
  3. .子程序 MyAPI, 整数型, 公开
  4. .参数 提示信息, 文本型
  5. .参数 按钮类型, 整数型
  6. .参数 窗口标题, 文本型
  7. 返回 (信息框 (提示信息, 按钮类型, 窗口标题))
  8. ======================================
复制代码

这样,带参数调用这个子程序后,程序就会根据传过来的参数调用易带的信息框命令,并返回结果给调用方
OK,我们把它编译出来存为"Mydll.dll",我们再新建一个窗口程序,先保存在"Mydll.dll"的同目录,然后点击左栏的"DLL命令"在右栏的空白处单击右键,选择第一项"新DLL命令"来新建一个DLL命令,在这个新DLL命令的"DLL命令名"里写入一个便于理解的名字,这里就叫"我的信息框",在"返回值类型"里写入我们在DLL里定以的类型"整数型",在"DLL库文件名"里写入我们的DLL名字"Mydll.dll"在"DLL库中对应命令名"中写入我们在DLL中公开的子程序名"MyAPI",然后"回车"3下,添加3个参数,名称不一定要相同,但类型一定要和我们在DLL里的子程序"MyAPI"一一对应,如下面的代码:
  1. .DLL命令 我的信息框, 整数型, "Mydll.dll", "MyAPI"
  2. .参数 提示信息, 文本型
  3. .参数 按钮类型, 整数型
  4. .参数 窗口标题, 文本型
复制代码

好,我们回到窗口界面,双击窗口,来到"_启动窗口_创建完毕"事件,在其下面写入如下代码:
  1. .如果真 (我的信息框 (“调用DLL成功!要退出程序吗?”, #是否钮, “信息”) = #是钮)
  2. 结束 ()
  3. .如果真结束
复制代码


写好后,F5运行,是不是出现了一个信息框啊!点"是"后还会退出程序!
恩,搞懂了这些,理解API也就不难了! API实际上就是一些在DLL中公开的子程序,我们只要事先知道这些子程序的名子及它的参数和它所在的DLL名称,象上面一样我们先在"DLL命令"那里声明后,就可以在易程序中像调用子程序那样调用了,我们一般查到的API资料都是些VB声明,就像下面的GetWindowText函数:
========================================================
GetWindowText
VB声明
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch
As Long) As Long
说明
取得一个窗体的标题(caption)文字,或者一个控件的内容(在vb里使用:使用vb窗体或控件的caption或text属性)
返回值
Long,复制到lpString的字串长度;不包括空中止字符。会设置GetLastError
参数表
参数 类型及说明
hwnd Long,欲获取文字的那个窗口的句柄
lpString String,预定义的一个缓冲区,至少有cch+1个字符大小;随同窗口文字载入
cch Long,lpString缓冲区的长度
注解
不能用它从另一个应用程序的编辑控件中获取文字

=======================================================
其中较重要的就是下面这句:
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA"

(ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

其中Lib后面的"user32"就是易中的"DLL库文件名",Alias后面的"GetWindowTextA"就是"DLL库中对应命令名",括号里的就是它的参数
每个参数间用","号隔开,其中AS后面的就是参数类型,前面的是参数的名称(简单的描述),括号外的As后面的就是返回值类型,这里的
"Long"的中文意思就是"整数型","String"是"文本型",所以这个API在易中就是这样声明的:
  1. .DLL命令 取得窗口标题, 整数型, "user32.dll", "GetWindowTextA"
  2. .参数 窗口句柄, 整数型
  3. .参数 缓冲区, 文本型
  4. .参数 缓冲区的长度, 整数型
复制代码

问: 窗口句柄我知道,可那个缓冲区和缓冲区的长度是怎么回事啊?
答: 据我自己的理解应该是这样,不知道对不对,也希望高手指教!这个问题跟内存传递数据的方式不无关系,不知道你有没有注意到DLL命令参数那还有个"传址"的选项,我们把鼠标移上去会出现一个提示,大意是说:如果参数的数据类型是文本,字节集,数组,用户自定以类型,库定以类型等不管是否选择此项都将直接传递地址过去而不是数据!也就是说DLL和调用程序间不能直接传递文本型的数据,只能传递文本型的数据在内存中的地址,而窗口标题是个文本型数据API不能直接把结果返回给我们,而是直接把结果写到我们提供的参数变量"缓冲区"的地址,在内存中的数据都是些字节型的数据,而文本数据是以2字节的{0,0}为结束标志,API要写入或保留这个标志,先要知道这个缓冲区的长度,所以就有了个"缓冲区的长度"的参数!并且,不只是这个API函数用这个方法,很多类似的API都是用的这个方法,像GetClassName(取窗口类名)等.

搞清楚了这样,我们就知道在易中该怎么调用了,如下面的代码:
======================================================
  1. .子程序 API取得窗口标题, 文本型
  2. .参数 窗口句柄, 整数型
  3. .局部变量 缓存, 文本型
  4. 缓存 = 取空白文本 (1000) '我们要先在内存中分配足够多的空间
  5. 取得窗口标题 (窗口句柄, 缓存, 取文本长度 (缓存) ) 'API调用是写入窗口标题到缓存的地址
  6. 返回 (缓存)
复制代码

=====================================================
然后
  1. 窗口名称=API取得窗口标题(窗口句柄)
复制代码

END

常见代码示例
  
  1. .版本 2
  2.   .DLL命令 ShellAboutA, 整数型, , , , DLL命令示例
  3.   .参数 HWND, 整数型
  4.   .参数 Name, 文本型
  5.   .参数 Text, 文本型
  6.   .参数 IcoId, 整数型
  7.   .数据类型 数据类型示例, , 自定义数据类型示例
  8.   .成员 成员1, 整数型
  9.   .成员 成员2, 文本型
  10.   .局部变量 变量, 整数型, , , 变量示例
  11.   变量 = 0 ' 变量赋值示例
  12.   .局部变量 数组变量, 整数型, , "0", 数组变量示例
  13.   _启动窗口.取窗口句柄 () ' 执行某对象方法
  14.   标签1.标题 = “” ' 对某对象成员进行赋值
复制代码
QQ拼音截图未命名.jpg

评分

参与人数 1精币 +5 收起 理由
已经习惯 + 5 精彩文章希望继续努力

查看全部评分


结帖率:100% (1/1)
发表于 2012-5-26 21:44:04 | 显示全部楼层   山东省济南市
写的太好了!谢谢!
回复 支持 反对

使用道具 举报

结帖率:89% (90/101)
发表于 2012-5-13 12:27:06 | 显示全部楼层   广西壮族自治区南宁市
0000000000000000000000
回复 支持 反对

使用道具 举报

结帖率:50% (3/6)

签到天数: 10 天

发表于 2012-4-5 23:56:05 | 显示全部楼层   广东省揭阳市
写的太好了!谢谢!
回复 支持 反对

使用道具 举报

签到天数: 22 天

发表于 2012-1-15 18:45:22 | 显示全部楼层   江苏省苏州市
不错,有时间研究下~~~~~~~~~~~
回复 支持 反对

使用道具 举报

结帖率:84% (21/25)
发表于 2011-8-21 12:51:01 | 显示全部楼层   广东省珠海市
谢谢W,拿走了!!看
回复 支持 反对

使用道具 举报

结帖率:50% (3/6)
发表于 2011-8-2 18:14:15 | 显示全部楼层   广东省珠海市
看看看看看,谢谢!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表