基于VB调用WindowsAPI函数编程技巧的

点赞:33674 浏览:156496 近期更新时间:2024-03-19 作者:网友分享原创网站原创

摘 要: API函数是操作系统和Windows应用程序的接口,能够直接控制和处理计算机的系统参数和硬件资源,实现许多高级功能.同时,API函数之多、功能之复杂让许多程序员望而生畏,因此,我们有必要掌握调用API函数的技巧.


关 键 词: API函数;VB;编程

中图法分类号:TP311.1文献标识码:A文章编号:1671-7597(2012)1020081-02

1 API函数概述

API(英文全称是:Application Programming Interface),

即应用程序编程接口.API函数是WINDOWS提供给应用程序与操作系统的接口,它位于WINDOWS操作系统核心之上、应用程序之下.Windows API根据操作系统的不同,可分为应用于16位操作系统的API(即Windows 16 API)和应用于32位操作系统API(即Windows 32 API).

2 API函数与软件编程技术

在WINDOWS操作系统占主导地位时期,开发WINDOWS平台下的应用程序成为人们的需要.在WINDOWS程序设计的初期阶段,WINDOWS程序员所能使用的编程工具只有API函数,程序开发也是比较复杂的工作,程序员必须熟记大量常用的API函数,而且还必须对WINDOWS操作系统有深入了解.随着软件技术的不断发展,在WINDOWS平台上出现了很多优秀的可视化编程环境,程序员可以采用“即见即所得”的编程方式来开发具有精美用户界面和功能强大的应用程序.这些优秀的可视化编程环境包括VB、VC++、DELPHI等都具有友好的界面、操作简单,而且提供了大量的代替了API功能的类库和控件.事实上,这些类库和控件都是构架在WIN32 API函数基础之上的、封装了的API函数的集合.它们把常用的API函数组合在一起成为一个控件或类库,并赋予其方便的使用方法,所以极大的加速了WINDOWS应用程序开发的过程.此时,程序员可以把主要精力放在程序整体功能的设计上,而不必过于关注技术细节.

基于VB调用WindowsAPI函数编程技巧的参考属性评定
有关论文范文主题研究: 关于操作系统的论文范文集 大学生适用: 自考毕业论文、学位论文
相关参考文献下载数量: 92 写作解决问题: 本科论文怎么写
毕业论文开题报告: 论文模板、论文题目 职称论文适用: 技师论文、职称评副高
所属大学生专业类别: 本科论文怎么写 论文题目推荐度: 经典题目

实际上,如果我们要开发出灵活、实用、高效的应用程序,必然要涉及到直接使用API函数.虽然类库和控件使应用程序的开发简单得多,但它们只提供WINDOWS的一般功能,对于比较复杂和特殊的功能来说,使用类库和控件是非常难以实现的,这时就需要采用API函数来实现.这正是API函数使用的场合.

3 API函数在VB开发中的应用技巧实例

Visual Basic作为一个当前流行的快速编程环境,其无限扩展的API接口可以实现所有WINDOWS下可以实现的功能.但是,我们能用到的API函数有几千个,这些“浩瀚”的API函数对于初学者来说总是显得那么神奇与不可琢磨,在实际应用过程中不能够灵活.所以,我们对待API函数不必刻意研究每一个函数的用法,那也是不现实的,正如某位大虾所说——API不要去学,在需要的时候去查API帮助就足够了.

下面将结合“限制鼠标移动”的例子来示范介绍VB中调用API函数的步骤和功能,并总结说明在实际工作中如何提高这方面的技巧(本例采用VB6.0编译).

限制鼠标移动的实例:

在设计基于Windows的应用软件时,通常要将鼠标限制在控件内部,直到任务完成或用户中断为止.此功能若借助API函数来实现则思路清楚、代码简洁.那就是:1)确定当前鼠标的位置;2)确定当前活动控件的大小;3)将鼠标限制在活动控件内.具体操作为:

① 建立一个新项目:新窗体为Form1,在Form1上添加一个CommandButton,设置Name等于CMButton1;Caption等于"将鼠标限制在此按钮中".

② 拷贝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" (ByValhwnd As Long, lpPoint As POINTAPI) As Long

'用来确定当前鼠标的位置

Private Declare Function ClipCursor Lib "user32" (lpRect As Any) As Long

'用来限定当前鼠标的活动范围

③ 定义一个通用过程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 Then '锁定在窗体范围内

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

④ 在 CMButton1_Click()中加入以下代码

Static Cliped As Boolean '静态变量用来控制状态切换

If Not Cliped Then

ConfineTo CMButton1

Cliped 等于 True

Else

ConfineTo Screen '取消鼠标限制

Cliped 等于 True

End If

⑤ 运行后,鼠标点击CMButton1,此时鼠标只能被锁定在此按钮内部,再次点击按钮,限制取消.

4 VB调用API函数时的注意事项

Visual Basic作为一种高效编程环境,封装了部分Windows API函数,但也牺牲了一些API的功能,在调用API时如果稍有不慎就可能导致API编程错误——出现难于捕获或间歇性的错误,甚至出现程序崩溃.因此,要减少API编程错误,提高VB调用API时的安全性,应重点注意:

1)指定“OptionExplicit”.

编程前最好将VB编程环境中的“RequireVariableDeclar

Ation(要求变量申明)项选中.如果该项未被指定,任何简单的录入错误都可能会产生一个“Variant”变量,在调用API时,VB对该变量进行强制转换以避免冲突,这样一来,VB就会为字符串、长整数、整数、浮点数等各种类型传递NULL值,导致程序无法正常运行.

2)注意VB整数和Win32整数的区别.

3)减少和避免使用AsAny.

4)注意检查参数类型.

5)勿忘ByVal,确保函数声明的完整性.

6)重新检查函数名.

7)预先初始化字符串,以免造成冲突.

8)跟踪检查参数、返回类型和返回值.

5 结束语

VB因简单易学、界面友好而成为学习计算机编程的首先,几乎可以完成所有Windows应用程序的编写.然而由于VB自身的局限性,要想直接控制和处理计算机的系统参数和硬件资源,实现一些高级功能,就必须通过调用Windows API函数,以增强VB的编程功能,从而开发出高效、功能强大的应用程序.