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

在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位的参数.
腾讯正式发布QQ浏览器微信版 摩托罗拉今年推智能手表,有望提高续航能力 众筹未来必拥抱众智 果合报告:iOS趋势及手游开发六大核心策略 无视OpenStack的前车之鉴,SAP等毅然支持Cloud Foundry 轻松搞定TB级数据,开源GraphLab突破人类图计算“极限值” 英特尔至强E7 v2处理器:2倍性能提升,3倍内存容量,4倍I/O带宽 著名工业设计师Yves Béhar:“我们并不需要三星智能手表。” 跨平台的.NET运行环境 Mono 3.2.7发布! Google石博盟:抓住全球化和移动化的机遇 ShareSDK针对Unity发布社交化组件 2014 CocoaChina开发者大会将公布触控奖学金等高校合作计划 中低端智能手机热销,未来市场或主打价格战 Facebook开源flint:一个用D语言编写的C++静态代码分析器 AMD携手BlueStacks,下半年推出零售版双操作系统 历时6年 Github发布基于Web的桌面文本编辑器:Atom Ratchet:构建移动应用原型,新版支持Android 13个最狂帅炫酷的前沿科技研究项目 打动面试官的五大技能 乐视TV和NBA签约三年互联网电视版权 首度披露大屏运营策略 支撑4.5亿活跃用户的WhatsApp架构概览 免费使用Windows?微软推Windows 8.1 with Bing实验项目 C/C++开发者必不可少的15款编译器+IDE Amazon推荐,Facebook追踪,大数据时代的“狗仔队” NewSQL登场,NuoDB告诉你未来数据库什么样 2014 Unity亚洲开发者大会·中国站:技术课程全面解析 与其坐以待毙不如主动出击 软件如何避免惨遭淘汰 一周消息树:程序员想找好工作?那就学好Linux! 移动周报:开发者必须了解的10大跨平台工具 一周热点:领先Google 150年的数据可视化及WhatsApp架构解析 R语言为Hadoop注入统计血脉 急救!如何再VB中把罗马数字和阿拉伯数字互相转换! dataGrid问题 在线等待 win2k server配了ad和dns后新开了很多端口,它们都是干什么的? 我的cb6怎么了?? 那位大哥能给我一个qq号?1000分酬谢? JBuilder7+Weblogic7+SQLServer2000的一个简单问题! 请问哪里有vfp的电子书? 3com Switch 1100 不能用了,怎么处理 急:怎样用crontab生成sa文件记录每天机器的耗内存情况? usb的通信问题,进者有分! 如何让WIN 2000 Prefession 装上服务器端 键盘delete怎么调用? 用Asp怎么得到用戶的機器名? 《Java与模式》一书作者的专栏 各位长老,如何修改本机的网关并让其立即生效? 关于数据表查询的问题? 创建二叉树及遍历的问题 高手请进! 研究生到底上些什么课,偶想知道,好明确自己的方向,请知道的朋友来谈谈。 如何在ASP.NET中连接PROGRESS数据库? VC中如何调用VB写的 DLL中的函数? 如何在程序背景中添加背景图片? postgreSQL中文问题 那里有informix的书下载 高分求助 MPEG4的视频问题 想为TListBox组件添加水平滚动条,有什么办法 在C#中,与CHTMLView类对应的控件是什么? 我有个小的30万象素的数码照相机,能用vb编程控制它自动照相么? 为什么我编译最基本的java文件总出错,告诉我import javax.servlet.http.*包 在linux下安装应用程序 关于串口的疑难问题 怎么连接数据库啊 请问如何用setfilter检索日期型数据 谁熟悉mpeg4 Audio? 怎么实现在界面上画网络拓补图!!!??? 一个关于企业上网的问题--高分求教 请问各位大哥如何屏蔽掉不想让此IP访问特定的网页? 厦门地区等待程序员办证通知的朋友,谁先知道具体时间请公布! 我调用数据库中的数据时候出现问题了 菜鸟提问! 串口问题 高分求两个文件:分别为tlbimp.exe和excel.dll 50分一个 串口问题 有谁知道HSV和RGB两种颜色模式的转换公式? 关于照片显示,请大家讨论 请教:关于表格的滚动问题 一个关于企业上网的问题--高分求教 数据类型转换问题 有了解“广州南方电信系统软件有限公司”的哥们么,了解一下情况。 有谁知道HSV和RGB两种颜色模式的转换公式? VB中的坐标问题 PPT上发标注重点,怎样在重点字上画出红色圆圈?教一下~谢谢啊!~PPT发给别人的时候要标注红色圆圈~~怎么标注? 怎么使用标注框.本人菜鸟,要保存之后发给别人还能看到红色圈圈的那种~~ 想图 煤粉炉的粒度要求是多少,最大2mm可以吗? 重力势能的改变只与物体始末两位置的高度差有关. PPT自选图形旋转后 文字也旋转了 怎么把文字正过来 在12M高的塔上,以一定的初速度竖直上抛一物体,经2S到达地面,则物体抛出去的速度为多大?物体上升的最大高度是多少(离地面高度)?三.甲物体从离地高度为h处自由落下,同时在它的正下方的 When someone walking ahead of you keeps the door open for you , 陶侃惜谷看出陶侃怎样的政治主张?如题 高一物理运动学公式帮我整理一份吧,我是高一新生都没学,不会整理啊人教A版的 如图所示,平直木板AB倾斜放置,板上的P点距A端较近,小物块与木板间的动摩擦因数由A到B逐渐减小,先让物要D的详解如图所示,平直木板AB倾斜放置,板上的P点距A端较近,小物块与木板间的动 急.辩论赛“响鼓也需重锤敲”, 乙酸乙酯含有醚建吗 0 11 -C-O-C 这个酯基中包含醚键吗?O 11 -C-O-C-是这个 求2人对话《The seaside place that you want to visit 我最想参观的海边城市》,20句左右,谁帮我编一段,做好有中文翻译, 桃树上的树脂怎么做菜 吃多了高热量的食物,但再运动很多的话会变肌肉还是消耗脂肪?吃多了高热量的,再运动很多,会形成肌肉?还是消耗脂肪? 操场上滚动的足球具有---能 桃树有··树脂?咱家楼下的桃树树干上长了大大小小的结晶体= =橙黄,浅黄的都有,有点像琥珀那种 咱妈说是桃树分泌的油.所以问问呢,这是啥东西~用来干什么的? 哪类食物不提供能量,哪种运动最消耗能量怎么减去小腿肌肉 急就这样了 miao~ 足球停在操场上,被人踢了一脚,开始在操场上滚动,同时速度逐渐减少,最后停下了,问:(1)足球从静止变为运动的原因是什么?(2)足球被踢出后,不再受脚的作用力,为什么足球还能在草地上 我家桃树为什么出了好多树脂?还有桃树上的桃子将要成熟时就会烂掉?这是为什么啊? 急!哪位化学高手告诉我一下如何判断化合物中是否含有σ键或者是π键,离域π键如题 足球停在操场上,被人踢了一脚,开始在操场上滚动,同时速度逐渐减小,最后停下来,足球从静止变为运动的原因是什么? 熟鸡蛋撞生鸡蛋,为什么熟鸡蛋先碎 选择 下面不是谁地里的微生物是( ) A、鼓藻 B、草履虫 C、水蚤 D、青霉菌 冬天怎么才能防止手龟裂? he tried hard but couldn't____the reason why she kept silence at the meetingAlook for Bfind Cfind out Dlook after 草履虫与水蚤,养在一起会发生什么,为什么 压铸模具用久了,模腔和镶件出现龟裂怎样处理 She couldn,t help thinkingabout the matter成分分析 夜深了,我望着沙发上鼓鼓的书包,深深地叹了一口气,我累了,我渐渐进入了梦想.作文400字 如图所示,平直木板AB倾斜放置,板上的P点距A端较近,小物块与木板间的动摩擦因数由A到B逐渐减小,先让物块从A由静止开始滑到B.然后,将A着地,抬高B,使木板的倾角与前一过程相同,再让物块从B 血浆中的水来自哪?为什么? 响鼓不用重锤作文 向试管中滴加少量液体试剂要用什么仪器? 内能转化为机械能的是1.子弹打入墙中2.火箭发射后,在他进入轨道之前的运行过程3.刀在石头上被磨得发烫4.篮球撞到地面上又被弹回来 根据《喇叭和鼓》这则寓言写一篇作文(400字左右)喇叭问鼓:“平心而论,我一旦吹奏起来,比你动听多了,可是为什么人们还是更爱你呢?”  鼓回答说:“因为你只喜欢在成功之后去捧场 【急!】一物体自由落下,重力势能会增加还是减少?动能呢?机械能会不会变化?一物体自由落下,重力势能会增加还是减少?动能呢?机械能会不会变化?为什么? “响鼓也要重锤敲”有什么事例?如《伤仲永》一文中所说,本为“神童”,但因不加以鞭策,不加努力,最终“泯然众人矣”,求找多几个类似的素材,正面反面素材都可以, 在含2摩尔硫酸的浓硫酸中加入足量锌粉,本使之充分反映,则下列推断错误的是 1,放出的气体为二氧化硫和氢气2只放出二氧化硫气体,其物质量为一摩尔3反应结束时转移电子的无质量为四摩尔. 如图所示,平直木板AB倾斜放置,板上的P点距A端较近,小物块与木板间的动摩擦因数由A到B逐渐减小,先让物块从A由静止开始滑到B.然后,将A着地,抬高B,使木板的倾角与前一过程相同,再让物块从B 高一物理学法指导? 在硝酸钾溶液中植物细胞质壁分离,质壁分离自动复原的过程中,硝酸钾进入细胞的方式是主动运输还是协助扩散 2011年9月份初有台风吗 血浆里的水和原尿里的水,哪个多?请各位大哥大姐解答一下! 您好!您有表格式的德语简历么?能够发我一份.249854242 2011年9月30日刮台风吗 孟德尔遗传规律在哪种生物中不起作用人类 B.玉米 C.蓝藻 甲音叉每分钟振动2000次,乙音叉半分钟振动800次,则甲音叉振动的频率_)选填小于或大于乙音叉振动甲音叉每分钟振动2000次,乙音叉半分钟振动800次,则甲音叉振动的频率_)选填小于或大于乙音叉 醚基中的氧两侧的碳只能连单键么,还是也可以连双键,为什么呢 求高中地理研究性课题名称(与地理有关的)速度啊~各位 实验中策动力的频率为200Hz,音叉臂的震动频率? 用脚踢静止在水平地面上的足球,球离开脚后动能怎样变化 怎样做烤羊肉串 水滴鱼怎么吃 植物细胞在硝酸钾溶液中质壁分离后又复原,请问吸收钾离子及硝酸根时为什么是主动运输. 怎么做烤羊肉串? 微生物实验中的平板冷却倒置是为了避免污染,那倒置过来后水滴不都直接粘到培养基上了吗?还避什么污染啊 植物细胞质壁分离是否与核糖体有关如题植物细胞质壁分离还与什么植物细胞器有关? PPT怎么在文字外面加圆圈想对一个字在最下边加以解释,怎么在这个字后面打一个带有圆圈的1啊? 煤粉粒度太细太粗对锅炉有什么影响 植物细胞里的核糖体练习书上说植物的核糖体不能合成分泌蛋白?怎么回事啊? 美国共和党遭保守派绑架 民主党有望夺水利部:今年解决6343万农村人口饮温州民资设立民营银行方案已上报北大回应不续聘夏业良:所谓\"政治迫松下半导体部门将大幅裁员部分港生在内地\"水土不服\" 投诉审计署回应“与纪委合署办公”:需从长“清风”生活用纸全国巡展首站启动星罗棋布 星巴克位置百度地图全知道工信部:婴幼儿乳粉兼并重组方案已报国长沙警方称新快报记者被拘案正按法律程原杭州市委书记黄坤明任中宣部副部长(职场\"咸鱼族\":得过且过不翻身 中国工商登记制度改革将宽进与严管并进巴基斯坦总理会晤奥巴马 当面敦促叫停美14岁中学生被控谋杀女教师 48小美媒指俄文化中心在美招募间谍 俄官方美国警察将玩具枪看成突击步枪 误杀1埃及教堂婚礼遭枪击多人伤亡 过渡政权因大量毒蜘蛛入侵 英国一中学校园被迫评论:拒任“非常任理事国”沙特给美脸华夏换帅李铁平静接受:该充电了华夏换帅李铁平静接受:该充电了起跑线之争映射三国青训体系之别人民民主是社会主义的生命媒体:请中学老师别再说“上了大学就轻44岁“电力大叔”圆大学梦中青报刊文驳斥“赦免腐败论”管教民警居广奇:与癌症抗争13年能源革命亟须自主创新技术引领后二孩时代 中国义务教育20年前瞻傅园慧很真很钻 一点儿不另类“从花里来,到花里去”意大利地震遇难人数升至291人陈潇:爱说话的高中“政治家”杭州G20印记内地奥运健儿与香港的“特殊约定”国际化学习习以为常“美式”礼貌银西高铁陕西段开工人格的成长福建首家省级互联网医院上线
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘