Office中国论坛/Access中国论坛

标题: 在VB中使用API函数(什么是API? ) [打印本页]

作者: WTM1    时间: 2002-9-23 18:54
标题: 在VB中使用API函数(什么是API? )
什么是API?

  API(Advanced Programmers Interface,高级程序员接口)(注:API实际是指Application Programming Interface,应用程序编程接口;此处疑为原文错误,不过在VB中也可以这么说吧!)是一套用来控制Windows的各个部件(从桌面的外观到位一个新进程分配的内存)的外观和行为的一套预先定义的Windows函数.用户的每个动作都会引发一个或几个函数的运行以Windows告诉发生了什么.

  这在某种程度上很象Windows的天然代码.其他的语言只是提供一种能自动而且更容易的访问API的方法.VB在这方面作了很多工作.它完全隐藏了API并且提供了在Windows环境下编程的一种完全不同的方法.

  这也就是说,你用VB写出的每行代码都会被VB转换为API函数传递给Windows.例如,Form1.Print...VB 将会以一定的参数(你的代码中提供的,或是默认参数)调用TextOut 这个API函数.

  同样,当你点击窗体上的一个按钮时,Windows会发送一个消息给窗体(这对于你来说是隐藏的),VB获取这个调用并经过分析后生成一个特定事件(Button_Click).

  API函数包含在Windows系统目录下的动态连接库文件中(如User32.dll,GDI32.dll,Shell32.dll...).

API 声明

  正如在"什么是API"中所说,API函数包含在位于系统目录下的DLL文件中.你可以自己输入API函数的声明,但VB提供了一种更简单的方法,即使用API Text Viewer.

  要想在你的工程中声明API函数,只需运行API Text Viewer,打开Win32api.txt(或.MDB如果你已经把它转换成了数据库的话,这样可以加快速度.注:微软的这个文件有很多的不足,你可以试一下本站提供下载的api32.txt),选择"声明",找到所需函数,点击"添加(Add)"并"复制(Copy)",然后粘贴(Paste)到你的工程里.使用预定义的常量和类型也是同样的方法.

你将会遇到一些问题:

  假设你想在你的窗体模块中声明一个函数.粘贴然后运行,VB会告诉你:编译错误...Declare 语句不允许作为类或对象模块中的 Public 成员...看起来很糟糕,其实你需要做的只是在声明前面添加一个Private(如 Private Declare Function...).--不要忘了,可是这将使该函数只在该窗体模块可用.

  在有些情况下,你会得到"不明确的名称"这样的提示,这是因为函数.常量或其他的什么东西共用了一个名称.由于绝大多数的函数(也可能是全部,我没有验证过)都进行了别名化,亦即意味着你可以通过Alias子句使用其它的而不是他们原有的名称,你只需简单地改变一下函数名称而它仍然可以正常运行.

  你可以通过查看VB的Declare语句帮助主题来获取有关Alias的详细说明.


消息(Messages)

  好了,现在你已经知道什么是API函数了,但你也一定听说过消息(如果你还没有,你很快就会)并且想知道它是什么.消息是Windows告诉你的程序发生了哪些事件或要求执行特定操作的基本方法.例如,当用户点击一个按钮,移动鼠标,或是向文本框中键入文字时,一条消息就会被发送给你的窗体.

  所有发送的消息都有四个参数--一个窗口句柄(hwnd),一个消息编号(msg)还有两个32位长度(Long)的参数.

  hwnd即要接受消息的一个窗口的句柄,msg即消息的标识符(编号).该标识符是指引发消息的动作类型(如移动鼠标),另外两个参数是该消息的附加参数(例如当鼠标移动时光标的当前位置)

  但是,当消息发送给你时你为什么看不到呢--就象有人在偷你的信一样?请先别恼火,让我告诉你.
  小偷其实是Visual Basic.但它并没有偷走你的信,而是在阅读了之后挑出重要的以一种好的方式告诉你.这种方式就是你代码中的事件(Event).

  这样,当用户在你的窗体上移动鼠标时,Windows会发送一条WM_MOUSEMOVE消息给你的窗口,VB得到这条消息以及它的参数并运行你在事件MouseMove中的代码,同时VB会把这条消息的第二个32位数(它包含了x,y坐标,单位为像素(Pixel),每个位16位)转换为两个单精度数,单位为缇(Twip).

  现在,如果你需要光标坐标的像素表示,然而VB已经把它转换成了缇,因此你需要重新把它转换为以像素为单位.在这里,Windows给了你所需要的,但VB"好意地"进行了转换而使你不得不重新转换.你可能会问--我难道不能自己接收消息吗?答案是肯定的,你可以使用一种叫做子类处理(Subclass)的方法.但你除非必须否则最好不要使用,因为这与VB的安全程序设计有一点点的违背.(注:子类处理确实有很大的风险,但如果使用得当,是很有用处的.不过有一点一定要注意,即千万不要使用VB的断点调试功能,这可能会导致VB崩溃!)

  需要补充说明的是:你可以发送消息给你自己的窗口或其他的窗口,只需调用SendMessage或PostMessage(SendMessage会使接受到消息的窗口立刻处理消息,而PostMessage是把消息发送到一个称为消息队列的队列中去,等候处理(它将会在该消息处理完后返回,例如有些延迟)).你必须制定接受消息的窗口的句柄,欲发送消息的编号(所有的消息的编号均为常量,你可以通过API Text Viewer查得)以及两个32位的参数.

看了这些相信大家对api有所理解
!!!
[em11]
作者: HG    时间: 2002-9-23 20:07
其實API的使用,總給人一些不安全的感覺。如難度大,不易理解,易崩潰,等等一系統列問題。還有關於API的使用教材少,難學習,等等。但API,作用是很大的。它可以為人之而不為。
作者: WTM1    时间: 2002-9-23 20:13
有道理!!!
在access中无法做到的!在api中可以做到!!
如果需要api
教材我可以给你发贴!!
作者: guoguoququ    时间: 2009-7-12 07:20
有道理!!!
在access中无法做到的!在api中可以做到!!
如果需要api
教材我可以给你发贴!!
作者: chaojianan    时间: 2009-9-27 09:27
了解学习api,谢谢。
作者: 沛敏光    时间: 2009-9-29 20:39
支持论坛发展!做为新人我来顶帖啦嘿嘿!
非主流图片   非主流伤感图片  非主流颓废图片 非主流个性图片  非主流情侣图片

9158虚拟摄像头 9158虚拟视频下载 9158多人视频空间 9158视频聊天下载

美女视频面对面 妞妞美女视频聊天   91美女 91美女网  淮海影院

淮海宽屏  电影我世界 无限影视  经典语录 经典语句

女生视频 美女丝袜视频 美女视频短片 女生网络热舞诱惑 美女视频网

三五美女网 三五美女 三五电影网 三五小说 三五美女在线影院

爱色吧 爱色吧在线电影 就爱色 我色我爱色 依旧爱色 深爱爱色 爱色吧在线

91美女网 丁香五月天91美女网 91美女图 丁香五月天91美女 丁香91美女

美女视频聊天室 虚拟美女接吻视频网站 美女陪你免费视频聊天


友情连接了!合作 发点好地址网址给大家看看
作者: kdjifir34562    时间: 2011-8-11 09:41
谢谢!!!学习中...




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3