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

在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位的参数.
粉碎硬件复杂论:开发者不懂硬件运行的方式怎么可以?! 最新版Chrome OS加入Word和Excel编辑功能 直指微软 传诺基亚将购诺西全部股份,疑为出售手机业务做准备? 优秀技术领导者的修成之道 直接拿来用!最火前端开源项目(三) 第八届开源中国开源世界高峰论坛成功举办 曾经那些主流的API,而今风光已不再! Android 4.3本月9日亮相 新功能汇总 移动游戏的国际化运营技巧 Google的Janus与Facebook的McDipper:将闪存用于数据中心 拥抱开源还是坚守阵地:传统数据库供应商面临抉择 超棒的30款JS类库和工具 立场坚定:惠普仍然密谋回到智能手机市场 6月份浏览器份额:Chrome成市场份额增长最快浏览器 关于PHP的十大误解 你中了几个? 专访西电朱虎明:异构计算硬件架构呈现百花齐放 百家争鸣 GSMA行纪:各种神器、好玩的、好看的全搜罗 大数据初创企业WibiData将Hadoop“打包”,谷歌董事长施密特两次参投 赚钱不忘环保 苹果计划为数据中心兴建太阳能发电厂 深度解析:清理烂代码 电信开放平台发布短信验证码API 创业教父Paul Graham谈创业投资趋势 挖掘Linux人才,打造Power生态系统!IBM启动“天合应用服务器定义未来挑战赛” 请不要忽略API的安全性 发布将近?苹果在多地注册“iWatch”商标 苹果聘请某时尚公司CEO为副总裁 将负责“特殊项目” 雅虎5000万美元收购视频分享应用Qwiki 创业第一年易犯的8大错误 苹果推iOS游戏手柄,掌上游戏主机格局变天? 代码审查固然伟大,那还有其他替代品吗? 怎样维护一个成功的开源项目 有谁能告诉我怎么使用索尼DSC-F717相机的“扩展”功能? 哪位有flash mx的汉化包?多谢了 MSSQL打开企业管理器后所有的数据都公开了,有没有办法能设立权限啊 出现了一个错误,搞不定哦help,在线 字符型变量如何转化为整型 为什么滚动条不工作? 请问 sqlserver2000中有可以把数据提出 , 输出到文本文件中的存储过程吗 那位大侠知道:如何返回webservice自身类的一个或多个实例? QuickReport是否可以套打?如何套打? 这段话看得太糊涂,请英语佳的大虾翻译一下 很诚恳的想问一个问题,可能对我的影响比较大。希望可以听听你们的意见!!!! 急急:谁能告诉我,tomcat4.1.18+sqlserver2000连接池如何配置、具体配置测试!我想把分全给他如果能的话 高分,简单问题.关于网格控件(在线等!) 触发器失败,是怎么回事啊?拜托。在线等待。。。 急需测试数据 关于连接的下载问题 在属性页中,各子页中类成员函数如何相互调用? 急!!!重载决策失败,原因是没有可访问的“Fill”可以用这些参数调用,怎么解决? 如何获取用户本地机的分辨率? 菜鸟的问题!!!在线等待! 请问一下印度做软件的报价~~~?? 急急~~ 求求求!!~~ 给满100分!! 关于WinRunner中遇到的难题,请高手帮忙! 请大家帮忙推荐几款linux下比较好用的看jpeg图和看mpeg4比较好用的软件! 请问数据库应用程序如何制作安装程序? 笔记本突然出现很多马赛克,然后死了,大概是什么原因? 各位大虾请进 求:0,1,-1的N长度组合算法 各位问一个比较少见的问题100分相送,急急急!!! 这样的条件判断语句要怎么写?(很简单的) 一款很不错的电子图书制作、资料管理软件 在-卢-<<利用XML实现通用WEB报表打印>>时报:未将对象引用设置到对象实例 DBEdit如何限制输入格式? 简单问题 ★★★狂急!请问怎样取得文件的创建日期!在线等!在线结贴!★★★ 初学xml,很简单的问题,就是不会,各位近来看看!一行代码搞不定… 有没有用于unix下c开发的dbx调试图形界面的工具? 哪位有tar 和 gzip 命令参数的详细中文介绍 jsp网站测试,欢迎大家测试 提问 请问有没有直接可以HTML(XHTML、SHTML)生成XML-XSL!!的工具 进程外组件的关于注册的问题? jsp中怎样生成静态页面 请问:如何返回webservice类的一个或多个实例? 怎样触发另一个窗口中的javascript函数? 谁能提供一些检测内存泄露的工具或方法 如何将 FoxBase 中的数据导入到 SQL Server 中? 求助:API操作注册表出现奇怪问题 请问如何改变windows xp中的用户的登陆顺序 有问题:如何通过页面下载附件? 求助:VB生成安装文件的问题 下面的程序怎样优化?(着急) 如图所示,固定的竖直轨道CD是光滑的四分之一圆弧,其最低点C的切线水平,半径R=0.3m.光滑水平面上,长L=2m的平板车上表面与C登高.车的左端A处放一质量m=1kg的小物块,物块与小车间的动摩擦因数 hypermesh划分的壳单元(shell63),对于两个component上的单元,可以做一个连接么? 作文 父母的奋斗史这种作文该怎么写才比较风趣.写作思路!中间我自己写最好 给出开头 一粒钢珠从静止状态开始自由下落,然后陷入泥潭中.若把在空中下落过程称为1,进入泥潭过程为2,则A,过程Ⅰ中钢珠动量改变等于重力的冲量B,过程Ⅱ中阻力冲量的大小等于过程Ⅰ中重力冲量的 境界究竟是何界?所以事物 vertify,confirm.certify之间用法有什么区别如题,例句:this result merely ____earilier american studies.填哪个,它们三者之间又是用如何应用的 质量为m的小球从离泥潭高好H出由静止落下,不计空气阻力,落在泥潭上又深入泥潭h后停止,求小球在泥潭中运动时所受平均阻力多大? 如图所示甲、乙两个都是3/4圆弧轨道均固定在水平面上,半径为r,不计一切摩擦如图所示甲、乙两个都是3/4圆弧轨道均固定在水平面上,半径为r,不计一切摩擦.将a、b两小球分别从两轨道右侧正 核电厂设备分级中 1E的字面含义是什么?是什么单词的缩写吗? 叶绿素不能添加在酸性食品中吗 谁能给我一些初二物理的题目?麻烦各位大虾了 请问在hypermesh里面怎么将材料属性赋值给单元啊? 抛物线的准线,焦点分别指什么? 题目来问我,科学 秦山核电站能抗几级地震? 超声波去除眼袋怎样 题目来问我,科学的 hypermesh中怎么建立弹簧单元 谁做过超声波去眼袋 AB是两个地震观测点,他们相距200千米,A测得在AB两点连线的左侧32°方向上有地震B测得在AB两点连线的方向左侧43°方向上有地震,请你根据图形,计算出震中点C到观测点B的距离 核电站与地震是否有必要担心 超声波去眼袋的优势有哪些? 螃蟹吃高粱—— (写歇后语) HyperMesh 材料属性中密度是那个单词 p/e值与p/b如何计算,如何根据p/e与p/b值分析股票内在价值 爱情的最高境界是什么样求大神帮助 请教一道关于判断电势高低的题有一用均匀导线做成的正方形线框ABCD(以左上角为顶点A,右上角为顶点B),正方形的一半放在和纸面垂直向里的匀强磁场中,当磁场的磁感应强度均匀增强时,试 股票是什么? 入秋的高梁,老来红 什么是核电筹建处 洛论兹力永远不做功吗? 有没有英语超级好的人.马上考英语了. 俄罗斯冬宫介绍 抛物线准线、焦点点P是抛物线Y2=2X上的一个动点,则点P到(0,2)的距离与点P到该抛物线准线的距离之和的最小值为多少? 爱到什么程度,就是最高境界. 冬宫怎么样 抛物线的准线和焦点表达 高粱开花——(歇后语)求大神帮助 冬宫高度是多少米? 关于四川地震的作文400—500字 爱情的最高境界是什么啊? 冬宫的描述 动作电位如何沿神经元传导 cf里哪个区人最多!哪个区好点? 冬宫什么形状 光的折射 透镜 填空1.用照相机拍摄相片时,景物到镜头的距离要____________,所成的像是一个____________________________像. 一位同学看到闪电开始计时,经3秒后听到雷鸣声,则打雷处距该同学多远?这种问题需要考虑光的传播速度吗? 女的能活多少岁拜托各位了 3Q 从神经元两端向中间传导的两个动作电位相遇后为什么会抵消 爱的最高境界究竟是什么? ug中的面相交是什么意思 要如何处理 同学们我想问哈,生物里的生态营养结构是不是指是食物网呢?还有,在碳循环过程中,碳的形式是答有机物还是二氧化碳呢,要分什么情况啊? 在同一地点看到闪电之后三秒听到打雷,问打雷地点距离多少? 一辆车在公路上匀速行驶,一人看见路程碑的数字是AB(A、B是1—9的数字,单位是:千米)1小时后他又看见一块路程碑的数字是BA.又过1小时,再看见一块路程碑的数字是A0B(0是数字0).问:汽 一道碳氧循环的初中生物题是不是所有的箭头指向的是二氧化碳库?即A是不是里面所有生物 BEFD箭头指向的是分解者?此道理在题目中是否适用? 谁能介绍下confirm用法 质量为2 kg的飞行物,在距地面高度为 19.6 m处以速度为 1=5 m/s水平飞行,质量为 3 ×10-2 kg的子弹以水平速度 2= 300 m/s击中飞行物, 1与 2沿同一直线,且击中后子弹没有穿出,不计空气阻力,试求 一次闪电 经过4秒听见雷声 问闪电在多元的地方 核电,核能发电站,1E级与非1E级指的是什么,有什么区别?核电,核能发电站,1E级与非1E级指的是什么,有什么区别? 为什么叫做溶融状态 也门石油收入锐减经济堪忧欧洲政治联盟计划受挫俄总理七小时安徽行:听民乐品徽茶 在俄罗斯总理梅德韦杰夫访问安徽包公祠(俄总理参观包公祠 向俄国推介包公(图也门一男子烧死15岁女儿 只因其与未美一公司将开发氦气球太空游 游客可观美观测到迄今最古老星系 距地球131澳琴师自称造出完美小提琴 可与世界名德防长批评美国监控传闻 称欧美关系将泰国一巴士坠山沟致21死 司机驾驶俄公交炸弹袭击或引发连环恐袭 索契冬挪威销毁叙化武受美国热捧 坦言国内压也门一男子烧死15岁女儿 只因其与未日本6名女性涉嫌在网络上上传猥亵视频澳洲一名男子涉嫌逼迫未婚妻致其死亡接美观测到迄今最古老星系 距地球131德防长批评美国监控传闻 称欧美关系将媒体评美国6岁儿童说“杀光中国人”:美国14岁少年被控刺死女教师 据称性澳琴师自称造出完美小提琴 可与世界名沪上首家盲人按摩实训基地揭牌降低申办主办费用相信年轻人就是相信未来默克尔批评法国意大利改革不力引发两国“淳静密西根”沪上旅游推介深化改革容不得“庸官懒政”“大山深处有人家”虹桥火车站地区乱象谁来管?奥运会告别“豪装”迎“简装”沪上“巨无霸”水产市场明年亮相数字说话上海成全国“最能花钱”的城市我国11月份出口增长4.9%微剧场:妈妈的爱今宵灯谜如何识别过敏性鼻炎沪指一任性重回“3”时代大韩航空副社长将空乘赶下飞机假多假少上海本土新锐乐团今结束高校巡演“不明身份”无人机伦敦险撞客机
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘