关键词不能为空

当前您在: 主页 > 英语 >

API函数详解

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-22 17:29
tags:

-

2021年2月22日发(作者:优钢)


API


函数详解



API


函数详解






:


什么是


API


你不学

API


,你大概将停留在初级水平,无法往上攀登



API


文本游览器


< br>什么时候使用什么函数,什么时候使用什么结构类型,什么时候使用什么常数


< /p>


一些


API


函数集







:


API


函数详解


(


转载自红尘如烟


)


标签


:







首先, 有必要向大家讲一讲,什么是


API


。所谓

API


本来是为


C



C++


程序员写的。


API


说来说去,就是一种函数,他们包含在一个附加名为


DLL


的动 态连接库文件中。用标


准的定义来讲,


API

< br>就是


Windows



32


位应用程序编程接口,是一系列很复杂的函数,


消息和结构,


它使编程人员可以用不同类型的编程语言编制出的运行在


Window s95



Wi


ndows

< p>
NT


操作系统上的应用程序。可以说,如果你曾经学过

VC


,那么


API


对你来说不


是什么问题。但是如果你没有学过


VC


,或 者你对


Windows95


的结构体系不熟悉,那么可


以说,学习


API


将是一件很辛苦的事情。




如果你打开

WINDOWS



SYSTEM


文 件夹,你可以发现其中有很多附加名为


DLL



文件。一个


DLL


中包含的


A PI


函数并不只是一个,数十个,甚至是数百个。我们能都掌握


它嘛


?


回答是否定的∶不可能掌握。但实际上,我们真的没必要 都掌握,只要重点掌握


Wi


ndos


系 统本身自带的


API


函数就可以了。但,在其中还应当抛开掉同


VB


本身自有的函数


重复的函数。如,


VB



etAttr

< br>命令可以获得文件属性,


SetAttr


可以设置文件属 性。



A


PI


来讲也有对应的函数


GetFileAttributes


和< /p>


SetFileAttributes



性能都差不多。


如此地


一算,剩下来的也就

5



600


个。是的,也不少。但 ,我可以敢跟你说,只要你熟悉地掌握


100


个,


那么你的编程水平比现在高出至少要两倍。


尽管人们说


VB



WINDOWS


具有密


切的关系,但我认为,


API


更接近


WINDOWS


。如果你学会了


API


,首要的收获便是对


W


INDOWS

< p>
体系结构的认识。这个收获是来自不易的。





如果你不依靠


API


会怎么样


?


我可以跟你说,绝大多是高级编程书本


(


当然这不是书的


名程叫高级而高级的,而 是在一开始的《本书内容》中指明《本书的阅读对象是具有一定


V


B


基础的读者》的那些书


)


,首先提 的问题一般大都是从


API


开始。因此可以说,你不学


A


PI



你大概将停留 在初级水平,


无法往上攀登。


唯一的途径也许就是向别人求救∶ 我快死了,


1-18


API


函数详解


快来救救我呀,


这个怎么办,


那个怎么办

< br>?


烦不烦呢


?


当然,

< p>
现在网上好人太多


(


包括我在内,


嘻嘻


)


,但,你应当明白,通过此途径,你的手中出不 了好的作品。这是因为缺乏这些知识


你的脑子里根本行不成一种总体的设计构思。





API


文本游览器






很多< /p>


API


函数都是很长很长的。


想看什么样 子吗


?


如下就是作为例子的


API < /p>


DdeClien


tTransaction

函数∶



Declare


Function


DdeClientTransaction


Lib



(pData


As


Byte,


ByVal


cbData


As


Long,


ByVal


hConv


As


Long,


ByVal


hszItem


As


Long,


ByVal


wF


mt


As


Long,


ByVal


wType


As


Long,


ByVal


dwTimeout


As


Long,


pdwResult



As


Long)


As


Long




哇!这么长


?


如果你从来没有接触过


API


,我 想你肯定被吓住了。你也许考虑,该不该


继续学下去。


不过不要 担心,


幸运的是


Microsoft


的 设计家们为我们提供了有用的工具,



便是

API


文本查看器。





通过


API


文本查看器,


我们可以方便地查找程序所需要的函数声明、


结构 类型和常数,


然后将它复制到剪贴板,最后再粘贴到


VB


程序的代码段中。在大多数情况下,只要我们确


定了程序所需要的函数 、结构和常数这三个方面后,就可以通过对


API


文本游览器的 以上


操作将他们加入到程序段中,从而程序中可以使用这些函数了。这些是学习


API


最基本的


常识问题,它远远占不到


API


的庞大的体系内容。今后我们把精力浪费


(


这绝不是浪费


)



哪里呢


?


那就是∶





什么时候使用什么函数,什么时候 使用什么结构类型,什么时候使用什么常数。





API


函数声明






让我们 回想一下。在


VB


中,如何声明函数呢


?


我想,如果你正在看此文,那么你绝对


能够回答得出这个问题 。以下便是你应该很熟悉的函数声明∶



Function


SetFocus


(ByVal


hwnd


As


Long)


As


Long




即,


这行代码定义了名为

< p>
SetFocus


的函数


,


此函数具有一个


Long


型数据类型的参数,


并按值传递


(ByVal),


函数执行后将返回一个< /p>


Long


型数据。





API


函 数的声明也很类似,如,


API


中的


S etFocus


函数是这样写的∶



Declare


Function


SetFocus


Lib



Alias



(ByVal


hwnd


As


L


ong)


As


Long


2-18


API


函数详解





有点复杂了一些。是的,是复杂了 点。但我可以告诉你,除了这些多出来的部分,其


他部分还是和你以前学到的东西是一样 的。函数在程序中的调用也是一样。如


:


Dim


dl


As


Long


dl&=SetFoucs()




它不象你自己写的程序那样能够看到里面的运行机理,


也不像< /p>


VB


自带的函数那样,



够从


VB


的联机帮助中查到其用法。唯一的方法就是去 学、查


VB


以外的资料。





Declare


语句用于在模块级别中声明对动态链接库



(DLL)


中外部过程的引用。对此,


你只要记住任何


API


函数声明都必须写这个语句就可以了。





Iib


指明包含所声明过程或函数的动态链接库或代码资源。


也就是说 ,


它说明的是,



数或过程从何而来的 问题。





如在上例中,


SetFocus Lib



说明



函数



SetFocus


来自




文件。


主要的


dll


动态连接库文件有∶




Windows


管理。生成和管理应用程序的用户接口。




图形设备接口。产生


Windows


设备的图形输出< /p>




系统服务。访问操作系统的计算机资源。





注意,当


DLL


文件不在


Windows



System


文件夹中的时候,必须在函数中说明其


出处


(


路径


)


。如,


SetFocus


Lib



函数声明中的


Alias

< p>
是可选的。表示


将被调用的过程在动态链接库



(DLL)


中还有另外的名称


(


别名


)



如,


Alias




说 明


SetFocus


函数在


< p>
中的另外一个名称是,



SetFocus


。怎么两个名都一样呢


?


当然,也可以是不同 的。在很多情况下,


Alias


说明的函


数名,即别名最后一个字符经常是字符


A


,如


SetWindowsText


函数的另一个名称是


S et


WindowsTextA,


表示为


Alias




这个


A


只不过是设计家们的习惯的


命名约定,表示函数属于


ANSI


版本。





那么,


别 名究竟有什么用途呢


?


从理论上讲,


别 名提供了用另一个名子调用


API


的函数


方法。如果你指明了别名,那么



尽管我们按


Declare


语句后面的函数来调用该函数,但在


函 数的实际调用上是以别名作为首要选择的。如,以下两个函数


(Function,AB CD)


声明都


是有效的,他们调用的是同一个

< br>


SetFocus


函数∶



Declare


Function


SetFocus


Lib




(ByVal


hwnd


As


Long)


As


Long


Declare


ABCD


SetFocus


Lib



Alias



(ByVal


hwnd


As


Long)



As


Long


3-18


API


函数详解





需要注意的是,

< br>选用


Alias


的时候,


应注意 别名的大小写;


如果不选用


Alias


时的时候,


函数名必须注意大小写,而且不能改动。当然,在很多情况下,由于函数声 明是直接从


AP


I


文本游览器中拷贝过 来的,所以这种错误的发生机会是很少的,但您有必要知道这一点。


< br>最后提醒你一句,


API


声明


(


包括结构、常数


)


必须放在窗体或模块 的



通用


(General

< p>
Decl


arations)


段。





数据类型与

< p>


类型安全






API


函 数中使用的数据类型基本上和


VB


中的一样。

< br>但作为


WIN32



API


函数中,



存在


I nteger


数据类型。另外一点是在


API

< br>函数中看不到


Boolean


数据类型。



Variant


数据类型在


API


函数中是以


Any


的形式出现, 如


Data


As


Any

< p>
。尽管其含义是允许任意


参数类型作为一个该


AP I


函数的参数传递,但这样做存在一定的缺点。其原因是,这将会


使得对目标参数的所有类型检查都会被关闭。


这自然会给各种类型的参数调用带来了产 生错


误的机会。





为了强制执行严格的类型检查,并避免上面提到的问题,一个 办法是在函数里使用上


面提到到


Alias

技术。如对


API


函数



GetDIBits


可进行另外一种声明方法。如下∶



GetDIBits


函数的原型∶



Public


Declare


Function


GetDIBits


Lib



Alias



(ByVal


aHD


C


As Long, ByVal


hBitmap


As


Long, ByVal


nStartScan


As


Long,


ByVal


nNu


mScans


As


Long,


lpBits As Any,


lpBI


As


BITMAPINFO,


ByVal


wUsage


As


Lo


ng)


As


Long


GetDIBits


函数的改型∶



Public


Declare


Function


GetDIBitsLong


Lib



Alias



(ByVal


aHDC


As


Long,


ByVal


hBitmap


As


Long,


ByVal


nStartScan


As


Long,


ByVal


nNumScans


As


Long,


lpBits


As


Long,


lpBI


As BITMAPINFO,


ByVal


wUsage


As


Long)


As


Long




通过本课程前面所学到的知识,我们已经可以得知原型



GetDIBits


函数也好,改型



GetDIBitsLong


函数也好,


实际将调用的都是


Alias


所指定的



GetDIBits


原函数。


但你 应


当看到,两者的区别在于,我们在改型的函数中强制指定


lp Bits


参数为


Long


形。这样就< /p>


会使得函数调用中发生的错误机率减少到了最小。这种方法叫做


< /p>


安全类型



声明。





API


函 数中经常看到的数据类型有∶


Long,String,Byte,Any....(< /p>


也就这些吧。


)



4-18


API


函数详解











对于


API


常数来讲,没有什么太特别的学问。请看


VB


中的以下代码∶< /p>



Msg


=


MsgBox(


您好



vbOKCanc el)


我们知道,



vbOKCan cel


这个常数的值等于


1


。对上面的 代码我们完全可以这样写,而不


会影响代码的功能∶



Msg


=


MsgBox(


您好



1)




但你大概不太愿意选择后一种,因为这会使得看懂代码费劲起 来。这种方法也被


API


采取了。只是


API


常数必须在事情之前做好初始化声明


VB


本身是看不懂的。其内容仍然


来自与


API

< p>
文本游览器。具体形式如下等等∶



Public


Const


ABM_ACTIVATE


=


&H6



Public


Const


RIGHT_CTRL_PRESSED


=


&H4



Public


Const


RPC_E_SERVER_DIED


=


&H80010007


Private


Const


RPC_S_CALL_FAILED_DNE


=


1727&


在常数的初始化中,


有 些程序使用


Global




Global


Const ABM_ACTIVATE


=


&H6



但我认为


Public


完全可以代替它。


过去我也用过


Global



但现在 不大用了。


一会儿用这个,


一会儿用那个,各程序之间不能保持 一致性了,起码看起来别扭。











结构是


C



C++


语言中的说法。在

< p>
VB


中一般称为自定义数据类型。想必很多朋友都


已经认识它。在


API


领域里,我更喜欢把它叫做结构,因为< /p>


API


各种结构类型根本不是我


定义


(


自定义


)


的。< /p>






VB


中,


API


结构 同样由


TYPE.......END


TYPE


语句来定义。如,在


API


中,点

< br>(P


oint)


结构的定义方法如下

:


Public


Type


POINTAPI


X


As


Long


'


点在

X


坐标


(


横坐标

< br>)


上的坐标值



Y


As


Long


'

< br>点在


Y


坐标


(

< br>纵坐标


)


上的坐标值



End


Type




又如,


API


中矩形


(Rect)


结构的定义如下∶



Public


Type


RECT


Left


As


Long


'


矩形左上角的

< p>
X


坐标



5-18


API


函数详解



Top As


Long '


矩形左上 角的


Y


坐标



Right


As Long


'


矩形右下角的


X


坐标



Bottom


As


Long


'


矩形右下角的


Y

坐标



End


Type




这些内容同样可以从


API


文本游览器中拷贝过来。这些结构中的变量名可随意改动,

< p>
而不会影响结构本身。也就是说,这些成员变量都是虚拟的。如,


POIN TAPI


结构可改为


如下∶



Public


Type


POINTAPI


MyX


As


Long


'


点在

X


坐标


(


横坐标

< br>)


上的坐标值



MyY


As


Long


'

< br>点在


Y


坐标


(

< br>纵坐标


)


上的坐标值



End


Type




不过,一般来讲,是没有这种必要的。结构本身是一种数据类 型,因此,使用时必须


声明具体变量为该结构型,


才能在程序中 真正使用到该结构。


结构的声明方法和其他数据的


声明方法一样 ,如,以下语句把变


MyPoint


声明为

POINTAPI


结构类型∶



MyPoint


As


POINTAPI




引用结构中的成员变量也十分简单,在结构名后面加上一个


< br>.



然后紧接着写要引用


的成员变 量即可。这很象


VB


中的引用一个对象的某个属性。如,假如我 们把上面已经声明



MyPoint


结 构中的


X


变量的值赋给变量


Temp&


则代码如下∶



Temp&=MyPoint.X




但需要特别注意的是,你千万不要认为上例中的


MyPoint


是一个值。它不是值,而是


地址


(


指针


)


。值和地址是完全不同的概念。结构 要求按引用传递给


WINDOWS


函数,即所

< br>有


API


函数中,结构都是按


B yRef


传递的


(


< br>Declare


语句




ByRef


是默认型


)


。对于结


构的传递,你不要试图采用


ByVal


,你将一无所获。由于结构名实际上就是指向这个结构


的指针


(


这个结构的首地址


)


,所以 ,你也就传送特定的结构名就可以了


(


参见小结,我用红


色字体来突出了这种传递方式


)


< p>




由于结构传送的是 指针,所以函数将直接对结构进行读写操作。这种特性很适合于把


函数执行的结果装载在 结构之中。











以下的 程序是为了总结本课中学到的内容而给出的。启动


VB


,新建一 个项目,添加一


6-18


API


函数详解



个命令按钮,并把下面的代码拷贝到代码段中,运行它。




Private


Declare


Function


GetCursorPos


Lib



(lpPoint


As


POINTAPI)


As


Long


Private


Type


POINTAPI


'


定义点


(Point)


结构



X


As


Long


'


点在


X


坐标


(


横坐标


)


上的坐标值



Y


As


Long


'


点在

Y


坐标


(


纵坐标

< br>)


上的坐标值



End


Type


Sub


PrintCursorPos(


)


Dim


dl


AS


Long


Dim


MyPoint


As


POINTAPI


dl&=


GetCursorPos(MyPoint)


'


调用函数,获取屏幕鼠标坐标





&


Str(MyPoint.X)


&



and



&



&


Str(MyPoint.Y)


End


Sub


Private


Sub


Command1_Click()


PrintCursorPos


End


Sub


输出结果为


(


每次运行都可能得到不同的结果,这得由函数调用时鼠标指针在屏幕中所处的


位 置而决定


)




X=


240


and


Y=


151


程序中,


GetCursorPos


函数用来获取鼠标指针在屏幕上的位置。





以上例子中,你 可以发现,以参数传递的


MyPpint


结构的内容在函数调用 后发生了实


质性变化。这是由于结构是按


ByRef

< p>
传递的原因。




一些


API


函数集




1.


控件与消息函数




AdjustWindowRect


给定一种窗口样式,计算获得目标客户区矩形所需的窗口大小



AnyPopup


判断屏幕上是否存在任何弹出式窗口



ArrangeIconicWindows


排列一个父窗口的最小化子窗口



AttachThreadInput


连接线程输入函数



BeginDeferWindowPos


启动构建一系列新窗口位置的过程



BringWindowToTop


将指定的窗口带至窗口列表顶部



7-18


API


函数详解



CascadeWindows


以层叠方式排列窗口



ChildWindowFromPoint


返回父窗口中包含了指定点的第一个子窗口的句柄




ClientToScreen


判断窗口内以客户区坐标表示的一个点的屏幕坐标




CloseWindow


最小化指定的窗口



CopyRect


矩形内容复制



DeferWindowPos


该函数为特定的窗口指定一个新窗口位置



DestroyWindow


清除指定的窗口以及它的所有子窗口



DrawAnimatedRects


描绘一系列动态矩形




EnableWindow


指定的窗口里允许或禁止所有鼠标及键盘输入




EndDeferWindowPos

同时更新


DeferWindowPos


调用时指定的所有 窗口的位置及状态



EnumChildWindows


为指定的父窗口枚举子窗口



EnumThreadWindows


枚举与指定任务相关的窗口



EnumWindows


枚举窗口列表中的所有父窗口



EqualRect


判断两个矩形结构是否相同




FindWindow


寻找窗口列表中第一个符合指定条件的顶级窗口




FindWindowEx


在窗口列表中寻找与指定条件相符的第一个子窗口



FlashWindow


闪烁显示指定窗口




GetActiveWindow


获得活动窗口的句柄




GetCapture


获得一个窗口的句柄,这个窗口位于当 前输入线程,且拥有鼠标捕获(鼠标


活动由它接收)




GetClassInfo


取得< /p>


WNDCLASS


结构(或


WNDCLA SSEX


结构)的一个副本,结构中包


含了与指定类有关的信息




GetClassLong


取得窗口类的一个


Long


变量条目



GetClassName


为指定的窗口取得类名




GetClassWord


为窗口类取得一个整数变量



GetClientRect


返回指定窗口客户区矩形的大小




GetDesktopWindow


获得代表整个屏幕的一个窗口(桌面窗口)句柄




GetFocus


获得拥有输入焦点的窗口的句柄



GetForegroundWindow


获得前台窗口的句柄




GetLastActivePopup


获得在一个给定父窗口中最近激活过的弹出式窗口的句柄




GetLastError


针对之 前调用的


api


函数,用这个函数取得扩展错误信息

< p>


8-18


API


函数详解



GetParent


判断指定窗口的父窗口




GetTopWindow


搜索内部窗口列表,寻找隶属于指定窗口的头一个窗口的句柄




GetUpdateRect


获得一个矩形,它描叙了指定窗口中需要更新的那一部分




GetWindow


获得一个窗口的句柄,该窗口与某源窗口有特定的关系



GetWindowContextHelpId


取得与窗口关联在一起的帮助场景


ID



GetWindowLong


从指定窗口的结构中取得信息



GetWindowPlacement


获得指定窗口的状态及位置信息




GetWindowRect


获得整个窗口的范围矩形,窗口 的边框、标题栏、滚动条及菜单等都在


这个矩形内




GetWindowText


取得 一个窗体的标题(


caption


)文字,或者一个控件的内容



GetWindowTextLength


调查窗口标题文字或控件内容的长短



GetWindowWord


获得指定窗口结构的信息



InflateRect


增大或减小一个矩形的大小




IntersectRect


这个函数在

lpDestRect


里载入一个矩形,


它是


lpSrc1Rect



lpSrc2Re


ct


两个矩形的交集



InvalidateRect


屏蔽一个窗口客户区的全部或部分区域




IsChild


判断一个窗口是否为另一窗口的子或隶属窗口




IsIconic


判断窗口是否已最小化




IsRectEmpty


判断一个矩形是否为空




IsWindow


判断一个窗口句柄是否有效




IsWindowEnabled


判断窗口是否处于活动状态




IsWindowUnicode


判断一个窗口是否为


Unicode


窗口。


这意味着窗口为所有基 于文本的


消息都接收


Unicode


文 字




IsWindowVisible


判断窗口是否可见




IsZoomed


判断窗口是否最大化




LockWindowUpdate


锁定指定窗口,禁止它更新



MapWindowPoints


将一个窗口客户区坐标的点转换到另一窗口的客户区坐标系统




MoveWindow


改变指定窗口的位置和大小




OffsetRect


通过应用一个指定的偏移,从而让矩形移动起来



OpenIcon


恢复一个最小化的程序,并将其激活




PtInRect


判断指定的点是否位于矩形内部




9-18

-


-


-


-


-


-


-


-



本文更新与2021-02-22 17:29,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/669524.html

API函数详解的相关文章

  • 爱心与尊严的高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊严高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊重的作文题库

    1.作文关爱与尊重议论文 如果说没有爱就没有教育的话,那么离开了尊重同样也谈不上教育。 因为每一位孩子都渴望得到他人的尊重,尤其是教师的尊重。可是在现实生活中,不时会有

    小学作文
  • 爱心责任100字作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任心的作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文