基于VB调用Windows API函数编程技巧的研究

时间:2022-10-02 05:13:44

基于VB调用Windows API函数编程技巧的研究

摘要: 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应用程序开发的过程。此时,程序员可以把主要精力放在程序整体功能的设计上,而不必过于关注技术细节。

实际上,如果我们要开发出灵活、实用、高效的应用程序,必然要涉及到直接使用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的编程功能,从而开发出高效、功能强大的应用程序。

参考文献:

[1]刘勇,Visual Basic 6.0程序设计实用教程,北京:清华大学出版社,2007.

[2]王福成、周铁柱、黄淼云等,Visual Basic 6.0数据库开发指南,北京:清华大学出版社,2000.

[3]陈英,Visual Basic 程序设计教程,大连理工大学出版社,2007.

[4]王栋,Visual Basic 程序开发实例教程,北京:清华大学出版社,2006.

[5]周爱武、汪海威,Visual Basic程序设计,北京:清华大学出版社,2005.

上一篇:基于心理暗示理论对隐性思想政治教育的探析 下一篇:对快乐体育思想植入小学体育教育中的研究