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

在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位的参数.
“勇者前线”开发商Gumi获1900万美元融资 工信部发首批10张虚拟运营商牌照 开发者有哪些新机会 【PPT集萃】十位一线专家分享Spark现状与未来 谁主沉浮,亚马逊和思科角力DaaS市场 忆往昔峥嵘岁月稠——看苹果第一代iPhone的“风骚”往事 开源工具链“大牛”的经验分享:HelloGCC 2013精彩演讲回顾 20个超实用的JavaScript技巧及最佳实践 【开源专访】Linux Deepin:做更好用的Linux桌面系统 访Andy Jassy:感受亚马逊AWS生态观,思考国内外云计算差异 站到风口,最先飞起来的能将服务做到极致的IDC 苹果Siri再获一专利:可使用自然语音输入来搜索和标记图片 研发周报:Google抛弃C语言,采用Go语言重写Go编译器 取其精华 IE11里移除和新增的功能 大胆预测亚马逊即将推出的五大产品或服务 移动周报:GitHub章鱼猫中国之行 三星与LG的新动向:同样的物联网 ,不同的玩法 从Twitter到Tinder,看社交媒体在2013年的沉浮 一周消息树:有道周枫和他的“放养”团队、太极助手惹“非议” Netflix:使用大数据驱动商业决策 “中国杯”游戏极限开发大赛报道 回顾2013软件开发:JavaScript领风骚 京东“宙斯杯”创新应用大赛,百万奖金为“你”而等待 12306上的分布式内存数据技术GemFire Canalys:苹果、三星2014年仍统治平板市场 微软压力山大 Google和苹果的下一个战场 回顾2013科技界大事件:Mayer登Vouge杂志、Ballmer离职 《近匠》第03期:移动开发工具访谈,AVOS Cloud——后端的金刚钻 次世代视觉:Avegant Glyph智能眼镜技术解析 技术栈的选择:从Groupon转向Node.js、淘宝去IOE谈起 首席数据官:一个属于你的时代已经来临 盘点2013年Facebook七大最受欢迎的hack 提问关于并发服务器。 关于jbuilder5开发EJB运行容器时的问题,跟帖都有分 请问怎样加一个位图作为Dialog的背景? 写dll链接时出错? 有谁知道windows屏幕保护的通用密码? 请教光标定位 如何使用PFXImportCertStore函数将.pfx文件注册到系统中啊! 有谁知道windows屏幕保护的通用密码 有关JSP运行的问题。分数多多 一个非常菜的问题! 如何利用socket截获80端口的数据? ji.ji.ji... 如何防止内存泄漏001 有谁知道windows屏幕保护的通用密码, xiaoxi777(小溪):请教你刚才的问题 有谁知道windows屏幕保护的通用密码,帮帮忙 在Unicode转换中,_T()与L到底怎么用,有什么区别? 关于利用QQ广告入侵 有没有深圳的阿,我快失业了,哪里要PB程序员啊 有谁知道windows系统的屏幕保护的通用密码 如何自动刷新网页?在线等待! 有谁知道window系统的屏幕保护的通用密码 怎样建设Java服务器?? 我用DELPHI打开了一个FOXPRO表,我想把FOX表的一个数字型字段(N.9.2)的一个数据(99.9)传给DELPHI中的一个变量,问这个变量是什么型的,是string,integer.? 请教Powerdesigner??? 一个ADO的问题,送上38分! 怎样在VB.NET中运行IE 在对话框显示时,怎样得到其位置? 上午62,下午54,有希望不? 关于串口打操作 一个关于InstallShield的小问题 本人朱小军,专门发帖子说有好东东,但是呢,每次都失信,各位,不要再相信我了。进来投一票吧。 关于串口的操作 如何在Delphi中调用函数StrTok? 那位大哥能否帮一下忙,详细告诉一下怎么安装fastreport,谢谢 请教一个 runtime的问题! 怎样使网页自动关闭且不出现提示框? double 和 str 如何转换? 如何将数据保存的二进制文件及如何读到及如何查询其中的数据??? 请教一个关于SQL语句的问题 高手请进,或许你知道 TechnoFantasy(www.applevb.com) 请进来取分,Taozc。 问大家一个基础问题? 怎么让FRAME启动时就为最大化的状态? 我想向各位高手请教关于对象序列化的问题! 现在很急,多谢各位! 如何获得像资源管理器上的桌面上的我的电脑,网上邻居等等 求救,关于打印机。 紧急!!!请教各位大虾: VC6上的MDI程序,我要在VC。net上运行,该怎么合理的修改?? 我也要《全套国标软件设计文档》,有谁收到了可以发一份给我吗?谢谢. mdb删除的问题,应该很简单吧 紧急求助,各位大虾: VC6上的MDI程序,我要在VC。net上运行,该怎么合理的修改?? 离子符号的书写氟离子 氢氧根离子 硝酸根离子 高锰酸根离子 氯酸根离子 碳酸氢根离子 两个镁离子用数字和符号怎么表示 讲解初三有关圆的知识 在氯化镁和氯化铝溶液中加氢氧化钠,先产生什么沉淀?是氢氧化镁还是氢氧化铝?请好心人士说仔细点. !“有一只质量为10g的瓶子,单独装满某种液体时,总质量为40g,单独装金属块时总质量为90g,先装入金属块,再加满液体,质量为100克,金属块的密度为8乘10的三次方千克/立方米.求液体的密度为? 不 用圆的知识解释井盖为什么是圆的 下列离子符号书写正确的是注:数字在右上角C.Al3+ D.So42-(4在右下角 2-在右上角) 一个瓶子装满水后称得瓶子和水的总质量为500g,若在瓶中投入金属块若干粒,称得溢水的质量为100克.此时剩余水瓶及金属块的总质量为670g.求金属块的密度呃,用公式求.其他答案我没看懂 浓硫酸与浓硝酸配成王水的比例是多少 50mlb摩尔每升氯化铝溶液中加50mla摩尔每升氢氧化钠溶液当ab满足什么条件a增大沉淀减少求氢氧化铝质量 向氯化铝溶液中滴加氢氧化钠溶液至过量,反应方程式 少量氨与氯化铝溶液反应能产生氢氧化铝沉淀吗? 如何找出离子符号的写法. 氢氧化铝和氢氧化钠的反应方程式 次氯酸,浓硝酸,浓硫酸,Cl2,王水,F2,那个氧化性强N和S的非金属性那个强次氯酸能和Cu反应吗方程式是什么 质量为68g的空瓶子,装满水后的总质量为184g,若先在瓶中放满煤油,煤油质量是多少?p油=0.8*10³kg/m³ 向Alcl3溶液中加入过量NaoH溶液的总反应方程式是什么 将氯化铝溶液和氢氧化钠溶液等体积混合,得到的沉淀物中铝元素的质量和溶液中铝元素的质量相等,试求原氯本题存在两个化学方程式:AlCl3+3NaOH=Al(OH)3+3NaClAl(OH)3+NaOH=NaAlO2+2H2O设:AlCl3和 质量为68g的空瓶子,装满水后的总质量的184g;若先在瓶中放入一个37.3g的金属块,然后再装满水,发现总质 王水是什么?请谈谈王水的化学原理及前沿应用. 为什么王水的酸性那么强?讲的越基础越好,2009-11-5 07:14回答的同学,我记得是盐酸和硝酸吧 氯化铝溶液中生成氢氧化铝是放热还是吸热 质量为89g的空瓶子,装满水后总质量为184g,若先在瓶中放37.3g的一金属块,再装满质量为89g的空瓶子,装满水后总质量为184g,若先在瓶中放37.3g的一金属块,再装满总质量 128g,则瓶子容积为多 逆王水的原理是什么 加热蒸发氯化铝溶液之后,有粉末状或者晶体状的物质析出,怎样分辨物质是氢氧化铝、氧化铝还是六水氯化铝 质量68g瓶子,装满水后质量为184g,若在瓶中放入37.3g的金属块,再装水质量为184g,则此金属密度为( ) 每日c的那种塑料瓶子能装开水吗?经常看到有人这么装,有问题吗?瓶子会烫溶化漏水吗?我不是拿来喝的,是用来当暖水袋的 不断加热氯化铝溶液能否生成氢氧化铝胶体 0.04mol氯化铝和0.16mol氢氧化钠混合 产生氢氧化铝沉淀多少克还有一个题向200ml0.1mol/l的naoh溶液中逐滴加入100ml0.1mol/l alcl3溶液 可得沉淀多少克 哪种塑料瓶子可以装开水? 化学中的离子符号怎样打?在百度《知道》中,打题时. 一个瓶子装满水后的质量为190g,在瓶中放入一快质量为37.3g的金属片,称得总质量为224g,求该金属的密度? 大瓶午后红茶的瓶子能够装开水吗,这种塑料能够承受开水吗 化学离子的符号怎样算氧离子 钠离子 氯离子. 氢氧化铝沉淀中加入氢氧化钠溶液会生成四羟基合铝酸钠还是偏铝酸钠?二者有何不同?二者究竟有何不同呢? 塑料瓶子可以装开水喝吗?塑料的杯子和饮料瓶子可以装开水喝吗? 有一个空瓶质量是200g,如果装满水的质量是700,今向瓶内装一些金属颗粒,使瓶和金属总质量为1kg,然后向瓶内有一个空瓶质量是200g,如果装满水的质量是700,向瓶内装一些金属颗粒,使瓶和金属总 烧碱加入氯化铝溶液中是生成简单的氢氧化铝沉淀还是生成较复杂的羟基铝,或者说生成氢氧化铝或羟基铝的条可是烧碱和氯化铝总能生成羟基铝啊,什么条件啊 王水化学式,化学名称是? 氯化铝和氢氧化钠反应的化学方程式 氢氧化铝和氢氧化钠反应到底生成四羟基合铝酸钠还是偏铝酸钠 向20ml某物质的量浓度的氯化铝溶液中滴加2mol/lNaOH溶液时,得到氢氧化铝沉淀质量与所滴加NaOH溶液的体积关系如图.(1)图中A点表示的意义(2)图中B点表示的意义(3)上述两步反应的总的离子方程式 氯化铝与氢氧化钠反应化学方程式 一个空瓶装满水后质量为64克,装满酒精后质量为56克,咋空瓶的质量是多大?空瓶的容积是多少立方米?楼要完整的过程! 为什么将底部有孔的瓶子的盖子拧紧 怎样打化学符号离子?怎样在文档里打离子右上角的小字? 一个空瓶装满水后64Kg,装满酒精后质量为56Kg,求空瓶的质量和它的容积. 给瓶子里的水加热时,盖上盖子,是使瓶子里气压增大还是减小?1、水烧开后,盖上盖子,使瓶子里气压增大还是减小?2、为什么烧瓶中的水加热至沸腾,用橡皮塞塞紧瓶口,倒置瓶口,热水停止了沸 碳化学符号是什么? 请问过氧化钠与过量氯化铝反映的化学反应方程式, 为了是AlCl3溶液中的铝离子尽可能全部转化为Al(OH)3沉淀,最合适的试剂是 A.氢氧化钠溶液 B.KOH溶液C氨水 D盐酸 锌离子的化学符号? 镁离子正点符号前面的2含义是什么 要使硫酸铝溶液中的铝离子全部沉淀下来,适宜的试剂是A、盐酸B、氨水C、氢氧化钠D、二氧化碳 为什么在制备氢氧化铝时要向氯化铝溶液中滴入过量的氨水,为什么是过量的氨水? 2个镁离子的符号符号方式 用圆的知识解释一下瓶子的盖为什么是圆的? 滴加氨水溶液到氯化铝中至过量和滴加氯化铝溶液到氨水至过量是否是同一离子方程式?滴加2,3滴醋酸溶液到碳酸钠和碳酸钠2,3滴到醋酸是否是同一离子方程是?滴加氢氧化钡溶液到硫酸氢钠 镁离子的微粒符号怎么写 用圆的知识解释日常生活中,人们围观时为什么会自然地形成圆形呢?更好的加10.
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn