开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 3919|回复: 4
收起左侧

[易语言纯源码] 通俗API使用教程

[复制链接]
发表于 2010-2-1 07:08:15 | 显示全部楼层 |阅读模式   广东省佛山市
看到易论坛上有很多新手朋友对API都不懂怎么使用,做为一个Windows 编程爱好者,如果不会用
Windows系统提供给我们的编程接口,那将是一件非常遗憾的事,鉴于此,本文作者以自身体会为基础,结
易语言实例,深入浅出的讲解API在易语言中的使用,希望对新手朋友有所帮助.
   
什么叫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个空白参数,参数名和类型等可以按自己的实际需
要填写,最后说明一下,如果你要外面的程序可以调用,一定要把"公开"勾上,下面是我的示例代码:
==============================
.版本 2
.子程序 MyAPI, 整数型, 公开
.参数 提示信息, 文本型
.参数 按钮类型, 整数型
.参数 窗口标题, 文本型
返回 (信息框 (提示信息, 按钮类型, 窗口标题))
======================================
这样,带参数调用这个子程序后,程序就会根据传过来的参数调用易带的信息框命令,并返回结果给调用方
OK,我们把它编译出来存为"Mydll.dll",我们再新建一个窗口程序,先保存在"Mydll.dll"的同目录,然后点击左栏的"DLL命令"
在右栏的空白处单击右键,选择第一项"新DLL命令"来新建一个DLL命令,在这个新DLL命令的"DLL命令名"里写入一个便于理解的
名字,这里就叫"我的信息框",在"返回值类型"里写入我们在DLL里定以的类型"整数型",在"DLL库文件名"里写入我们的DLL名字
"Mydll.dll"在"DLL库中对应命令名"中写入我们在DLL中公开的子程序名"MyAPI",然后"回车"3下,添加3个参数,名称不一定要相
同,但类型一定要和我们在DLL里的子程序"MyAPI"一一对应,如下面的代码:
.DLL命令 我的信息框, 整数型, "Mydll.dll", "MyAPI"
    .参数 提示信息, 文本型
    .参数 按钮类型, 整数型
    .参数 窗口标题, 文本型

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

写好后,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在易中就是这样声明的:
.DLL命令 取得窗口标题, 整数型, "user32.dll", "GetWindowTextA"
    .参数 窗口句柄, 整数型
    .参数 缓冲区, 文本型
    .参数 缓冲区的长度, 整数型

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

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

恩,不知道大家明白了吗?俺是再懒得打字了,有什么不懂的,可以和我联系,俺的QQ:23453161
也可以问API高手"近在眼前",俺原来也是看他写的程序自己琢磨出来的!
END

结帖率:43% (3/7)

签到天数: 4 天

发表于 2010-2-4 13:41:37 | 显示全部楼层   广东省揭阳市
好长,看了一下,很不错,
回复 支持 反对

使用道具 举报

结帖率:0% (0/3)
发表于 2010-2-10 20:12:02 | 显示全部楼层   河北省邢台市
不错啊。。。。
弄个教程 就更好了
回复 支持 反对

使用道具 举报

结帖率:45% (5/11)
发表于 2010-3-26 14:19:58 | 显示全部楼层   广西壮族自治区柳州市
对我也赞同,弄个教程就最好了,呵呵
回复 支持 反对

使用道具 举报

结帖率:89% (34/38)
发表于 2013-8-2 15:29:56 高大上手机用户 | 显示全部楼层   重庆市重庆市
不错不错,不过我建议你下次讲解下HOOK的使用吧。
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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