易语言资源网 - 做最全的易语言资源下载社区
精易论坛授权登录

API的使用   [复制链接]

    2018-09-01 16:09:44
    图文资料
    易语言资源网
    10026 次浏览

看到易论坛上有很多新手朋友对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后面的就是参数类.DLL命令 取得窗口标题, 整数型, "user32.dll", "GetWindowTextA"
    .参数 窗口句柄, 整数型
    .参数 缓冲区, 文本型
    .参数 缓冲区的长度, 整数型


: 窗口句柄我知道,可那个缓冲区和缓冲区的长度是怎么回事啊?

: 据我自己的理解应该是这样,不知道对不对,也希望高手指教!

这个问题跟内存传递数据的方式不无关系,不知道你有没有注意到DLL命令参数那还有个"传址"的选项,我们把鼠标移上去会出现一个提示,大意是说:如果参数的数据类型是文本,字节集,数组,用户自定以类型,库定以类型等不管是否选择此项都将直接传递地址过去而

不是数据!也就是说DLL和调用程序间不能直接传递文本型的数据,只能传递文本型的数据在内存中的地址,而窗口标题是个文本型数据API不能直接把结果返回给我们,而是直接把结果写到我们提供的参数变量"缓冲区"的地址,在内存中的数据都是些字节型的数据,而文本数据是以2字节的{0,0}为结束标志,API要写入或保留这个标志,先要知道这个缓冲区的长度,所以就有了个"缓冲区的长度"的参数!并且,不只是这个API函数用这个方法,很多类似的API都是用的这个方法,像GetClassName(取窗口类名)等.
 搞清楚了这样,我们就知道在易中该怎么调用了,如下面的代码:

======================================================

.子程序 API取得窗口标题, 文本型
.参数 窗口句柄, 整数型
.局部变量 缓存, 文本型

缓存 取空白文本 (1000)   '我们要先在内存中分配足够多的空间

取得窗口标题 (窗口句柄, 缓存, 取文本长度 (缓存) ) 

'API调用是写入窗口标题到缓存的地址

返回 (缓存)

=====================================================

然后

    窗口名称=API取得窗口标题(窗口句柄)  



[错误报告]   上一篇:养眼黑底灰色_2套配色方案...     下一篇:Windows API 函数 电子书下载...