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

VB如何提高调用WINDOWS API函数编程技巧

HTML文档下载 WORD文档下载 PDF文档下载
VB如何提高调用WINDOWS API函数编程技巧
石油大学(北京)
顾岱鸿
---- 做为一个不断进取的编程者,我们常常不满足于编程语言所提供的一般功能,总是希望能够实现一些特殊的功能,这有时不但是我们程序的要求,有时也是编程者心理上需要(试想,还会有什么比在深夜中巧妙解决一个难题而更令人兴奋呢?)。VisualBasic,做为一个当前最流行的快速编程环境,就给我们提供了实现这些目标的平台,事实上,它无限扩展的API接口可以实现所有WINDOWS下可以实现的功能。然而对于初学者来说,"浩瀚"的API函数总是显得那么神奇与不可琢磨,因此在实际应用过程中不能够灵活应用。下面我将结合两个小例子来示范介绍VB中调用API函数的步骤和功能,并总结说明在实际工作中如何提高这方面的技巧。例子在WINDOWS98下采用VB6.0编译。

一.限制鼠标的移动
---- 有时我们的软件要求用户在未完成某一任务时,鼠标不能移出当前活动控件,换句话就是将鼠标限制在控件的内部,直到任务完成或用户中断为止。这个功能借助API函数实现起来思路很清楚,代码也很简洁。其思路是先确定当前鼠标的位置;然后确定当前活动控件的大小;最后将鼠标限制在活动控件内。(下面忽略项目建立等过程)
---- 1.建立一个新项目:新窗体为form1,在form1上添加一个commandbutton,设置其Name=CMButton1;Caption="将鼠标限制在此按钮中"

---- 2.拷贝API函数和POINTAPI结构:打开VB6.0自带的API浏览器,调入WIN32API.txt文件,复制以下结构和函数声明到form1的声明部分:

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Type POINTAPI
x As Long
y As Long
End Type

Private Declare Function ClientToScreen Lib
"user32" Alias "ClientToScreen" (ByVal
hwnd As Long, lpPoint As POINTAPI) As Long
'用来确定当前鼠标的位置

Private Declare Function ClipCursor Lib
"user32" Alias "ClipCursor" (lpRect As Any)
As Long '用来限定当前鼠标的活动范围

---- 3.定义一个通用过程ConfineTo
Public Sub ConfineTo (myCtl As Object)
On Error Resume Next
Dim tmpRect As RECT
Dim pt As POINTAPI

With myCtl
If TypeOf myCtl Is Screen Then '锁定在屏幕范围内
tmpRect.Left = 0
tmpRect.Top = 0
tmpRect.Right = (.Width \ Screen.TwipsPerPixelX)
tmpRect.Bottom = (.Height \ Screen.TwipsPerPixelY)
Elseif TypeOf myCtl Is form '锁定在窗体范围内
tmpRect.Left = (.Left \ Screen.TwipsPerPixelX)
tmpRect.Top = (.Top \ Screen.TwipsPerPixelY)
tmpRect.Right = (.Left + .Width) \ Screen.TwipsPerPixelX
tmpRect.Bottom = (.Top + .Height) \ Screen.TwipsPerPixelY
else
pt.X = 0
pt.Y = 0
Call ClientToScreen(.hWnd, pt)
'获取当前控件在屏幕上的位置
tmpRect.Left = pt.X
'保存当前控件位置
tmpRect.Top = pt.Y
pt.X = .Width
pt.Y = .Height
Call ClientToScreen(.hWnd, pt)
tmpRect.Bottom = pt.Y
tmpRect.Right = pt.X
End If
Call ClipCursor(tmpRect)
End With
End Sub

---- 4.在 CMButton1_Click()中加入以下代码
Static Cliped As Boolean
'静态变量用来控制状态切换
If Not Cliped Then
ConfineTo Cmbutton1
Cliped = True
Else
ConfineTo Screen '取消鼠标限制
Cliped = True
End If

---- 5. 运行后,鼠标点击cmbutton1,此时鼠标只能被锁定在此按钮内部,再次点击按钮,限制取消。
二.创建临时文件
---- 临时文件用来保存软件运行过程中的临时变化,这对于熟悉WORD等软件的人来说,经常会遇到。那么临时文件是如何产生的呢,其实很简单,只需要一个API函数就可以。
---- 1.拷贝声明函数(方法同前)

Private Declare Function GetTempFileName Lib "kernel32" _
Alias "GetTempFileNameA" (ByVal lpszPath As String, _
ByVal lpPrefixString As String, ByVal wUnique As Long, _
ByVal lpTempFileName As String) As Long
参数定义如下:
lpszPath =传入保存临时文件的路径 ,如"C:\mytemp"
lpPrefixString=传入临时文件名开始的前三个字母,
起到帮助识别临时文件来源的作用。
wUnique =0 ,windows随机产生文件名;否则安其值定义文件名。
lpTempFileName=返回随机文件名

---- 2.返回临时文件名
Private Function GenTempName(sPath As String)
Dim sPrefix As String
Dim lUnique As Long
Dim sTempFileName As String

If IsEmpty(sPath) Then sPath = "c:\temp"
sPrefix = "TVB"
lUnique = 0 'windows随机给名

sTempFileName = Space$(100)
GetTempFileName sPath, sPrefix, lUnique, sTempFileName
sTempFileName = Mid$(sTempFileName, 1,
InStr(sTempFileName, Chr$(0)) - 1) '去掉多余空格
GenTempName = sTempFileName
End Function

---- 3.将下面代码加入到form1_click()事件中
MsgBox GenTempName("c:\temp")

---- 4.运行,鼠标点击form,弹出msgbox,显示生成"c:\temp\TVB724.tmp"文件,用文件管理器查看,在c:\temp下有TVB724.tmp 文件,长度为0K。
---- 需要注意的是,传入的路径必须是有效路径,否则GenTempName函数返回0,lpTempFileName中也没有临时文件名。

三.结束语
---- 从上面可以看出,API函数的确简单高效,但也充满一些看似高深的变量而使人却步。我们不禁会问,究竟什么时候要用到API函数?具体哪些函数可以解决我的问题?,那些函数中的变量都代表什么?其实对这些问题,即使对一个VB高手也难给出明确的回答,因为API函数库实在太庞大了,每一个人最终只能熟悉其中的一小部分(这也可能是调用API的文章层出不穷的原因吧)。总结自己的一点经验,我觉得应该注意以下几点。
---- 1.熟练掌握VB基本技巧,了解其所能所不能,这是最基本的要求。

---- 2.了解WINDOWS内部控制机理,这样对一些复杂的问题就可以逐步分析其调用机制,初步确定采用哪部分的API函数来解决问题。

---- 3.案头必备一本最新的VB版的WINDOWS API 大全,推荐机械工业出版社的<>。书中给出了每一个VB可以调用的API函数的详细说明,可以帮助精确了解所需要的API函数的变量声明。

---- 4.多看别人的程序。报纸杂志,尤其是网上这方面的文章数不清。这是最快的方法。

---- 5.随用随查。永远不要在用不到的函数上浪费宝贵的时间
【CTO讲堂】浅析工业级物联网项目的快速开发 云适配陈本峰:平台型企业级浏览器是未来办公移动化的核心 警报:XcodeGhost已扩散至第三方框架 我们眼中的应用另一端是什么? 【SDCC讲师专访】百度马如悦:不写代码的架构师不是好架构师 企业级应用避免臃肿混乱的6大黄金法则 SDCC 2015讲师专访精彩集锦:程序员界“香饽饽”、大神级人物都在! 从技术经理的角度算一算,如何可以多快好省的做个App(一) 【SDCC讲师专访】Java泛型作者Gilad Bracha:优秀的程序员应该未雨绸缪 【CTO讲堂】微服务架构在云端的应用 SDCC 2015创业项目路演火爆征集:寻找中国好项目 被遗忘的设计模式——详解Swift语言中的Null Object Pattern Synaptics发布全新触控及生物识别方案,正式进军车联网 无人机、机器人,英特尔RealSense已扩展至新领域 SDCC 2015中国软件开发者大会盛大开幕 《近匠》逸创云客服创始人叶翔:做好客服产品静待SaaS大爆发时代的到来 【SDCC2015现场】数据库实战论坛:分布式数据库的实践与挑战 SDCC 2015 中国软件开发者大会亮点回顾 《近匠》扬智科技GoWarrior:软硬件全面开源的计算平台 【CTO讲堂】独家直播双十一全网动态?前黑客“劳改”带你玩转大数据 《近匠》好雨云刘凡:提供全方位支持的一站式开发服务云平台 体验过HTC Vive,才知道何谓沉浸感 BDTC 2015:大数据技术精英云集 初版日程公布(表) 深度剖析C++对象池自动回收技术实现 React Native与ExMobi技术路线探索 SDCC 2015前端专场札记:Facebook、百度、腾讯、美团、饿了么等互联网公司的前端实战 芯片巨头为何痴恋开源软件?英特尔Imad Sousou来解密 3D Touch:岂止于Multi-Touch Atlassian亚太区业务经理Paul Conroy:敏捷是开发者的痛点 基于DuiEngine的开源DirectUI图形界面库SOUI 【CTO讲堂】工具类、新闻类、视频类等不同类型App的积分体系该如何搭建? 关于<BASE> 那里有WebDB下载啊. 在ListCtrl里加类似Combo Box的东西,能实现吗? windows2000下vb的一个小问题~~ 如何把当前路径加入查找路径中?立即给分! 对选用不同的纸张大小,在预览中能看出效果吗? 请问怎么在PB6.0中实现Foxpro(*.dbf)的数据导入,到ASA库中 j2me里怎么才能实现图象的滤镜效果?waiting... CDbSet m_dbSet(NULL)在哪一步才能得到一个CDatabase对象的错针? 新手提问:“镜象”是什么意思 求教,如何配置使性能达到最佳,详情见文 怎样在广域网中提高传屏响应速度?帮帮忙!急啊. 在文件钩子当中如何判断是打开文件操作,还是创建文件操作 怎样在applet程序中显示一幅jpeg图片?该图片存在于c:\image\下。 去年12月是谁发的帖子“做项目经理难么” 关于图层拖拽的问题 我有一块硬盘,迈托4.3G,开格式化分时说错误设备或0磁道损坏,后来fdisk分区,启动无效 这是个什么错误啊~ 第一次做控件不明白 给点指点啊 急求:从硬盘安装windowsxp时电脑出显不能安装,找不到eula!如何解决? 不用的控件怎样从工程中删除? 怎样将一个表中的全部数据追加到别一个表的后面????在线 我做软件这些年 求scjd的模拟题 为什么我连续给一个socket send三次,socket一次就接收完了? 关于HTML代码不区分大小写? 大家看一下这个CListCtrl是啥回事?? Turbo c++3.0怎么使用? 《水园MSN俱乐部宗旨》 ODBC连接数据库的一个问题求教 如何让网页一打开就是全屏模式? 关于打印的问题 怎么彻底卸载linux啊!放分100 如何移动无模式窗体? 一个网络版软件的共享使用问题 在线等待!!! 一个网络版软件的共享使用问题 98怎么与xp不能连网玩游戏?高分送!! 有个问题请大虾帮帮忙! 我该怎么办呀??? ★怎样让窗口的resize在某一指定的范围内? 笔记本问题~ TURBO C 中显示鼠标和图形方式的问题(看我的源代码) ACCESS中的SQL语句不支持limit语法吗?~~急问啊~~~ 为什么会这样? 我在网上下了个C1TrueDBGrid 不知怎么用?有没有什么限制?请各位帮忙? 只有这里可以发发牢骚了,斑竹别删 100分(不够可以再加!)求《PC游戏编程--人机博弈》光盘源代码!!在线等 网上考试系统热卖中............(请版主勿删) 100分解决文件流问题 怎样添加右键菜单?? 请问JDK装好之后,有一个 JAVA WEB START是干什么用的? piece和bar的区别 填人体器官词 ( )枪( )剑 向a克水中加入b克可溶物中所得溶液质量一定是(a+b)克吗如题最好举个实例啊 bar用于长方形物体那piece呢? 填与人体器官有关的词:归()似箭、()()俱裂、()亡()寒、()蜜()剑、狼()狗() 青海的地震有几级 苏丹国家的气候情况 偶然误差可以通过以下哪种方法得以减小? 强酸条件下硝酸根离子可以氧化氨盐吗老师说浓度低时不会反应,只有在高浓度和硝酸氨固体加热时才会反应,各位帮我确认下他的话是否正确. 请问苏丹的气候条件真的很恶劣吗?国人能适应吗? 不参与淀粉的消化,但参与蛋白质消化的消化液是?A.肠液 B.胰液 C.胃液 D.唾液 在强酸溶液中,下列各组离子能大量共存的是?A 钠离子 钡离子 硝酸根 氯离子 B钠离子在强酸溶液中,下列各组离子能大量共存的是?A 钠离子 钡离子 硝酸根 氯离子 B钠离子 氯离子 硝酸跟 银离 苏丹是哪个半球,什么人种,什么语言,什么宗教,什么气候类型? 人体脑部生长最快的年龄段是 . 泡菜坛里酒倒多了怎么办 十万分之一天平,该选哪个好呢? 为什么硫酸铜溶液不能放在金属容器中? 独行菜能吃吗?是不是有毒啊?3Q 精确到0.1mg的天平到底应该使用什么样的天平?不知道用万分之一的还是十万分之一的?原理是什么?如果是十万分之一,最低和最高称量多少克呢? 徐志摩的《偶然》表达了怎样的爱情观?与舒婷的《致橡树》对比有何不同?或直接把《偶然》的爱情观告诉我就行了 十万分之一天平的有效称量量是多少 用一道题及解答来介绍什么是模糊数学 CuSO4加什么生成Cu 哪种事物混吃有毒?3Q 一些较浅的伤口破了之后,不流血,流一些透明的液体,基本上不粘,怎么了?有两个月了吧,混身上下都是 cuso4不能与下面哪种容器盛放 一氧化碳和甲烷能否生成碳单质 是否有氢氧化硫 氢氧化氮 一说? 伤口处的透明液体是什么我的小拇指根手背处蹭破了皮,在蹭伤中应该算是深的了,血没流很多(没到可以滴的程度),但却有白色透明的液体在伤口上(不要忽悠我是血浆,水,我生物成绩很好 某酯C7H14O2经水解得到A和B,A能发生银镜反应,则该酯是 洛伦兹曲线与基尼系数是如何体现收入分配的平等程度的 梅特勒-托利多AG135分析天平价格多少? 我想问一下为什么电磁炉会爆炸?这几天看到几则电磁炉爆炸的新闻,我感觉到很困惑,根据电磁炉发热的原理,电磁炉为什么会爆炸呢?是什么部件爆炸呢?这里有两个链接 收入分配的平等可以用哪些标准衡量( ) A.劳动分配率 B.洛伦斯曲线和基尼系数 C.工资的差异率 D.以上都 现在要用高效液相色谱法测定水样中残留的抗生素 要有水样前处理 实验要有水样前处理 实验 和要做出什么数据和图表 要宋江的性格特征 主要的五件事 要按时间顺序 有一两句话概括 老师留的作业 求教洛伦兹曲线与基尼系数的区别和联系,详细一点的. 什么是参考企业比较法? 电网系统SF6气体有哪些化学性质? 微观经济学中,基尼系数如何衡量收入分配的状况 梅特勒电子天平十万分之一什么是一分钟后读数吗在高原海拔4000左右,温度一般十几度湿度冬天的话也20以下.用着感觉很不稳定,一开始我们是把要称的样品放在上面等小圆圈消失后等一分钟 电力系统中SF6气体有哪些化学性质? 请问肯尼亚的气候怎么样?南苏丹呢? 谁有Waters2487高效液相色谱仪说明书? SF6气体有哪些化学性质?贵派电器 《美研究显示:现有技术无法克隆人》 阅读题 数学中的作商与1比较法具体是怎样的 稀盐酸HCl 除铁锈Fe2O3 的方程式是什么?要配平! 生殖性克隆不安全,应该禁止与美研究显示:现有技术无法克隆人之间是什么关系 生殖 【讨论】十万分之一或百万分之一的分析天平哪个牌子的好? 1.20摄氏度时.在10克水中最多能溶解3.6克食盐.则20摄氏度时食盐的溶解度是 A.36克 B.3.6克 C.36 D.3.61.20摄氏度时.在10克水中最多能溶解3.6克食盐.则20摄氏度时食盐的溶解度是 A.36克 B.3.6克 C.36 D.3.6 水中氧元素的化合价+2用化学式表示 地沟油是不是废品啊 还有什么利用价值么 无差异曲线特点有哪些? 美的电压力锅水槽里没水,真气水在锅口流不了? 十万分之一的电子天平都有哪些品牌 用HCl除铁锈后,有白色气泡产生, 电离方程式是O++OH-=H2O的化学方程式→_→怎么可能没有 你认真点儿……不会的话就别来误导我…… 伤口白色,还有液体,是不是感染了手术后10天我自己查看伤口,缝针露出的内肉(就是本来在皮肤下的)是白色的,但在伤口结合处已经长出新肉,有很少量的渗出黄色液体,压上去有些微疼,在伤口 在20度时,30G水中最多能溶1.5g,某种物质,则该物质为可溶物质!怎样算? 美撤军前在阿富汗军事成果受侵蚀 安全阿富汗政府被曝将在美撤军后与“基地”乐高拟在韩建东亚首座乐高乐园 预计斯诺登爆料NSA早已入侵了雅虎和谷歌以色列释放26名巴勒斯坦犯人 亲人兴印尼一处豪华别墅内被发现暗藏多种珍禽研究称英国社会阶层八百年来几乎未发生韩国海域15日沉船事故一失踪中国船员《世界新闻报》窃听案8名被告中有3人日国会议员山本太郎向天皇递交书信 或美媒称奥巴马支持率跌至新低 挫折积累印尼一处豪华别墅内被发现暗藏多种珍禽德国两大党举行第二轮谈判 部长人选仍南非“刀锋战士”谋杀案再添非法持有弹韩国防部:无计划推动签署韩日军事情报美国安局总监否认曾非法窃取谷歌和雅虎朴槿惠11月初将访欧 拟拉动韩欧创造《福布斯》主编:普京因在外交发挥关键福布斯全球权力榜安倍仅排第57 不如日本航空自卫队一空士长因偷窃被予以免为躲避意大利繁冗昂贵程序 180对夫央行行长今日答记者问下月起生育多胞胎 每增1胎可多报销3陕将秦凯司雅杰夺金房地产税法已列为 人大第一类立法项目西铜一级路渭河桥南段封闭施工 交通提高荣明: 看好女足进奥运前八订单式定向培养儿科医生卫冕冠军谌龙遭淘汰奥运男女足抽签 下月举行陕将秦凯司雅杰夺金汽车合格证去哪儿了?以精神扶贫助推精准扶贫推行减量分类指标考核霍金等百余科学家 反对英国“脱欧”下周起旅客只能买 5月12日及之前车美国93岁老妇 被补发高中毕业证书2月份我国社会 融资规模增量下降欧洲央行 火力大开留后患彩票开奖公告网友五天捐出五万余元力争2018年实现 “垂直”环保执法
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘