说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

在VB中使用API函数 (之一)

HTML文档下载 WORD文档下载 PDF文档下载
在VB中使用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位的参数.
.NET开发不可错过的25款高效工具 Docker最佳实践!尽在2014 Container技术大会 pflua:用Lua编写的高性能网络包过滤工具箱 掌上明珠张磊:如何设计手游付费体系 云游科技何千军:游戏开发和后端逻辑经验 《近匠》Highway1:孵化,不只是简单的帮助 嘉宾来了 MDCC 2014首批演讲嘉宾名单公布 前雅虎CTO:Hadoop扩展过程中的7个危险信号 【云先锋】星环TDH:性能大幅领先于开源Hadoop2的技术架构赏析 一周消息树:我想创业,但不懂技术怎么办? GitHub迁移数据库,借助MySQL大行其道! 实例亲授:教你如何创建AR应用 iOS七年,苹果都为开发者准备了哪些工具? TIOBE 2014年9月编程语言排行榜:Java、C++跌至历史最低点 如何甄别具有软实力的IT应聘者? 避免关注底层硬件,Nvidia将机器学习与GPU绑定 盘点MIT Demo Day上4个最有前途的创业点子 IDF 2014第一天纵览:智能设备唱主角 时尚化才是可穿戴的未来 ASP.NET之父Scott Guthrie:借技术之力铺平未来之路 两年测试,NSA或将让其数据中心洗上油浴 【云先锋】数云:另类淘宝创业,瞄准背后百万卖家的数据挖掘 Xcode 6 GM、6.1齐出,Swift终迎1.0版! 我眼中的Devops——倍道而进! 英特尔物联网世界:提供开发工具包,实现万物互联 三十功名尘与土——我的程序员生涯自白 触摸未来:为什么说AR是未来最重要的人机界面? 科普:谈云计算中间件理念 能准确“猜透”玩家心理,深度学习让游戏更智能 阿里过程改进专家:看板核心在于拉动式管理过程+数据化支持改进 英特尔Edison全面上市,专为小型可穿戴设备设计 APM最佳实践:Web 2.0和AJAX四大优化战略 数据库存在怎么找不到? 请问应用程序服务器一定要在NT操作系统下编写吗? 我不高兴,一个贴子只能回复三次,没道理啊!有时三次回答是解决不了问题的。。。我不高兴。。。 谁能告诉我比较优秀的国外的远程教育站点? 请问大家谁有用CGI编写的类似于购物车的程序源代码? mail函数的使用 请教,如何在text的onkeypress中控制输入的字符为数字 为什么resultset.last()说是抽象方法错? 问问高手关于CFrameWnd的创建 男人单身不是罪 谁能介绍几本国外专家编写SQL Server的进阶教程(最好有电子版) 我也不得不说了,为了我的朋友,为了随风,也为了我自己。。。。。。。。。。。。(贴子长,上班的时候还是别看了好:) 请推荐几本用vc开发服务程序的书籍 请问如何在TC30中使用并连接第三方LIB??? 曾经有一个中毒的人…… to: nononono(null,null),再来! 导入的数据,字符型输出为乱码在oracle8.05中,如何解决?谢谢! 做设计文档时,是先进行详细设计还是数据库设计? csdn我爱你........ oracle8.05中如何察看记录?谢谢! 哪位兄弟见过可以收发邮件(SMTP)的源码,做成动态连接库的那种。别的程序可以调用 关于tedit控件(很弱智的问题,但是小妹妹我就是不会做) 请问一个简单的条件是用Ttable的filter还是Tquery? 选DCOM还是CORBA? 倒库出现的问题 寻求怎样写SQL语句的教程 JNI的问题: dll文件放在哪里能被servlet调用到? 好不容易收到第一份海外定单! 问ListCtrl的item上的右键菜单 怎样求出一个点的坐标??????急急!!!! 请大家看一看这个分页程序,为什么在页数大于20时,按下一页时下面的页数还是显示的1~10页!!谢谢!! 我的linux在放mp3時總愛死,為甚麼? 唉,弄了好几天了,如何解决?????????????? 请问哪里有免费的PHP+MYSQL主页空间呀! 大家快来帮忙:数据库的一个小问题 我现在想学一门新技术,不知道是学VC++,JAVA,还是刚刚出来的。NET技术呢?请高手指点呀。 高分征解:一个动态提示窗口的问题,给出答案必定给分!!!求救我啊!! 在这里赚分真不容易呀! 怎样检查FORM中CHECKBOX和RADIO的值呢 那里有在asp中操作word对象的详细教程? 请问:如何得到TForm的窗口句柄? authorware中的按钮。 哪里有发送mail成功的php程序!! 关于上传数据的一个特殊问题,有点难 怎么用OLE实现与手机的通讯?? 汉语分词算法 grid显示问题 成为Delphi高手须看哪方面的书籍,请高高手指教? 关于属性页的小问题? 为水园增加点正气: 大家都是斯文人吗,呵呵||||| 诗经国风2001版----之桃夭 高手高手教教我 硫酸和硫脲反应吗 物质的树状分类图. 图中哪个化学式写的对 柠檬酸钠和硫脲反应吗? 物质的分类,(树状图) 请列举出含有硫元素的物质,将其化学式/硫元素化合价和物质类别填写在表格中8个(以下皆是)硫元素化合价物质类别 为什么不能把硝酸铋固体直接溶于水中来制其溶液,硝酸铋与水有什么反应? 请选择你熟悉的化学物质,制作一张交叉分类图 怎样辨别物质间能否发生复分解反应 硝酸铋能不能与EDTA反应 请选择你所熟悉的化学物质,制作一张交叉分类图 根据复分解反应发生的条件,判断下列物质间能否发生复分解反应.如能发生反应,写出反应的化学方程式.(1)碳酸钠溶液和氯化钙溶液(2)氢氧化钾溶液和盐酸(3)硫酸和氯化钠溶液(4)碳酸钾溶液和 硝酸铋为什么能溶解于稀硝酸 请教反应方程式 A、B、C是三种不同类别的含有氧元素的化合物,物质间相互反应的关系如图所示(图中“─”表示相连的两种物 这些物质能否发生复分解反应?1.碳酸钠溶液和氯化钙溶液2.氢氧化钠溶液和盐酸3.硫酸和氯化钠溶液4.硫酸钾溶液和盐酸5.硫酸铜溶液和氯化钡溶液这些物质之间能否发生化学反应?可以的话请 硝酸铋水解的化学方程试是什么? A、B、C、D、E分别为五种不同类别的化合物,它们之间的反应关系如右图所示箭头表示物质之间能够相互转化,横杠表示两端物质能够发生反映.已知A、B、C、D四种物质中都含有同一种元素:C是 判断下列物质能否发生复分解反应,如能发生反应,写出反应化学方程式碳酸钠溶液和氯化钙溶液,氯化钾溶液和盐酸,硫酸和氯化钾溶液,碳酸钾溶液和盐酸,硫酸铜溶液和氯化钡溶液 亚锡酸钠与硝酸铋反应现象及方程式? A为金属单质,B,C,D为三种不同类型的化合物,物质间相互反应的关系(A—B—D—C—A)① D的A为金属单质,B,C,D为三种不同类型的化合物,物质间相互反应的关系(A—B—D—C—A)① D的化学式是— 4.根据复分解反应的条件,并利用书后附录1所提供的信息,判断下列物质间能否发生复分解反应.如能发生反应,写出反应的化学方程式.(1)碳酸钠溶液和氯化钠溶液(2)氢氧化钾溶液和盐酸(3 什么物质可以通过一定反应直接形成盐? A、B、C三种化合物通过分解反应分别产生了两种物质(反应条件和各物质化学式前的系数均已略去):A——M+N B——M+Q C——M+PN为一种盐,其水溶液可跟AgNO3溶液反应生成一种不溶于硝酸的白 下列物质能否发生复分解反应,能反应的写出化学方程式,不能的说明理由1盐酸与硝酸银溶液2硫酸和氯化钡溶液3碳酸钠溶液和氢氧化钙溶液4稀硫酸和硝酸钾溶液 盐发生反应的条件①盐和盐 ②盐和酸 ③盐和碱是不是①③要求反应物都溶于水 ②不要求盐溶于水? 按图1-3中箭头所表示的物质间发生的转化,写出相应反应的化学方程式,并指出有元素化合价发生改变的反应. 下列各组物质,能发生反应的写出化学方程式,不能反应的说明理由(1)汞与硫酸亚铁溶液(2)氯化钠溶液与硝酸钾溶液 盐是一类常见的物质,什么物质通过一定反应可直接形成盐? 该图中各种化学反应方程式和反应类型 下列物质能否反应?能反应的写出化学方程式,不能反应的说明理由.1、Mg+NaCl===____________________________2、Zn+H2 SO4===____________________________3、Cu+ZnSO4===____________________________4、Cu+HCl===_____________________ 工业上常用什么反应制取食盐? 完成图中所示的化学方程式,并注明反应的基本类型及反应条件 下列物质中能否发生复分解反应,如能发生反应,写出有关反应的化学方程式,不能反应说明理由1.硫酸和硝酸钠溶液2.氢氧化钾溶液和硝酸3.氯化钠溶液和硝酸银溶液4.碳酸钾溶液和盐酸 酸的化学分子式是什么?碱的化学分子式是什么?酸和碱结合生成什么反应?盐和醋结合生成什么反应? .如何做交叉分类图现有氧化钠.二氧化硫.甲烷.氯化钡四种物质,请按其所属做一张交叉分类图 下列物质能否反映,能的写出化学方程式,不能的说明理由 哪几种常见物质结合会产生非常剧烈的反应 横线表示两种物质能反应,箭头表示一种物质能生成另一种物质.请把符合图的所有情况列出来. 物质与氧气反应一定是氧化反应吗? 盐和硫酸会产生什么反应难道盐和硫酸混不到一起?像鸡尾酒一样 右图是关于铁化学性质的知识网络下图是关于铁化学性质的知识网络(“→”表示一种物质转化为另一种物质),其中B是密度最小的气体C为红色固体单质1、A物质的化学式为——.2、反应②还 物质在氧气中燃烧的反应是不是一定是氧化反应 请教氢氧化钠和尿素在什么条件下可以产生反应?书上说氢氧化钠和尿素加热就能反应,可是已经煮了好久了(氢氧化钠和尿素浓度为10%),也没有发生反应.请问还需要什么助剂或催化剂才能使 硫酸和什么反应 生成盐和水 化学题:求解.(2010•宜昌)右图是物质化学性质的知识网络图,(2010•宜昌)右图是物质化学性质的知识网络图,“-”表示相连的两种物质能发生反应,“→”表示一种物质转化成另一 尿素在氢氧化钠条件下水解反应方程式 硫酸加上盐产生什么反应 右图是关于盐酸化学性质的知识网络——表示连接的两种物质能发生反应箭头表示一种物质转化成另一种物质A,C属于不同类别的化合物完善这个知识网络 B/ \A----HCL----C|ZN (1)写出a,b,A-----B--- 尿素高是怎么回事,怎么治疗 硫酸(H2PO4)跟NaOH反应,所生成的盐可能有:( )A、1种 B、2种 C、3种 D、4种磷酸 图是物质化学性质的知识网络图,求A、B、C、D、E 在上海松江,哪里可以买到硫代硫酸钠、硫酸氢钠、尿素、硫脲、耐腐蚀的不锈钢容器做一项试验,以上药品仅需最小包装量,希望各位朋友能提供相关信息,在下感激不尽 什么物质能跟硫酸发生反应生成蓝色溶液 图是关于盐酸化学性质的知识网络,——表示相连的两种物质能发生反应,→表示一种物质转化成另一种物质物质能发生反应,→表示一种物质转化成另一种物质,A,C属于不同类别的化合物,请完 硫脲类作用机理是抑制哪种酶的活性原因及机理 怎样判断两种物质发生反应后所生成的物质 如图, 硫脲与铅反应吗 物质分类图如何画? 写出下列表格中相应酸的化学式,指出它们的类别Cl SO4 NO3 CO3 CH3COOH ___ ___ ___ ___ ________类别 ___ ___ ___ ___ ________写出碱的化学式,并指出类别.Na Al Ca Mg NH4OH ___ __ ___ ___ ____ 类别 ___ __ ___ ___ ____上一
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn