教程中国
PHOTOSHOP CS9.0中文版 MAYA 8.5 FOR WINDOWS Corel Painter v9.0 Flash MX2004 中文版 Illustrator cs2 中文版
VC++6.0含sp6 中英文版 VB6.0 +sp6 简体中文版 Borland Delphi 7汉化版 MSDN for vb6.0中文版 Visual Studio 2005简体
教程中国下属 文件存储共享专家BIBIDU.COM 提供大型软件,教材,源码,电影,音乐,图书等下载 更多精品请点此进入
  您目前所在位置: 教程中国 >> VB >> 编程技巧 >> VB的API编程精粹(二) RSS订阅
VB的API编程精粹(二)
VB的API编程精粹(二)(1)
教程(视频,书籍)下载:  ASP.NET AutoCAD 数据库 C# ASP java photoshop 网页设计 delphi 3dmax Flash C++ VB 张孝祥 实例   更多请进入BIBIDU搜索
IT搜索引擎   

Visual Basic以友好易学的可视化开发环境闻名于 世,成为人们学习计算机编程的首选语言。目前,全世界 大概有300多万人使用着Visual Basic语言。如果您想在 这茫茫众生中出类拔萃,那么您就不得不学习API (Application Program lnterface,即Windows的应用程 序编程接口)编程。不懂API,那可成不了高手。
第一节:API基础
API说到底就是一系列的底层函数,是系统提供给 用户用于进入操作系统核心,进行高级编程的途径。通 过在Visual Basic应用程序中声明外部过程就能够 访问Windows API(以及其它的外部DLLs)。在声明 了过程之后,调用它的方法与调用Visual Basic自 己的过程相同。要声明一个DLL过程,需要在代码窗 口的"声明"部分增加一个Declare语句,如果该过 程返回一个值,应将其声明为Function。例如:
Declare Function publicname Lib "libname" [Alias "alias"] [([[ByVal] variable [As type] [,[ByVal] variable [As type]]...])] As Type
如果过程没有返回值,可将其声明为Sub。
缺省情况下,在标准模块中声明的DLL过程,可 以在应用程序的任何地方调用它。在其他类型的模块 中定义的DLL过程是模块私有的,必须在它们前面 加上Private关键字,以示区分。特别提请注意的 是,在32位的Visual Basic中过程名是区分大小 写的。而在以前的16位版本中并不区分大小写,这 是初学者容易出错的地方。
Declare语句中的Lib子句用来告诉Visual Basic如何找到包含该过程的dll文件。如果引用的过 程属于Windows核心库(User32、Kernel32或 GDI32),则可以不包含文件扩展名。例如:
Declare Function GetTickCount Lib "kernel32" Alias "GetTickCount"() As Long。对于其它DLL, Lib子句须指定文件的路径及扩展名。
如果调用的Windows API过程要使用字符串,那 么在声明语句中必须增加一个Alias子句,以指定 正确的字符集。包含字符串的Windows API函数实 际有两种格武ANSI格式Unicode格式。因此,在 Windows头文件中,每个包含字符串的函数都同时有 ANSI版本和Unicode版本。
例如,下面是SetWindowText函数的两种C语言描 述。可以看到,第一个描述将函数定义为SetWindowTextA, 尾部的"A"表明它是一个ANSI函数:
SetWindowTextA(HWND hWnd,LPCSTR lpString);
第二个描述将它定义为SetWindowTextW,尾部的 "w"表明它是一个Unicode函数:
SetWindowTextW(HWND Hwnd,LPCWSTR lpString);
因为两个函数实际的名称都不是"SetWindow Text",要引用正确的函数就必须增加一个Alias子句:
Private Declare Function SetwindowText Lib "user32" Alias "SetWindowTextA"(ByVal hwnd As Longg,ByVal lpString As String) As Long
请注意, Alias子句后面的字符串必须是过程的 真正名称,必须是区分大小写的。事实上,您只需要 记住,只有Windows NT才支持Unicode格式,而 Windows 95只支持ANSI格式就行了。至于两者的区 别,作一般的应用程序开发是不需要了解的。
VB5专业版在VB目录的\Winapi子目录下,用几 个文件提供了关于API的信息。 Win32api.txt文件中 包含了32位Windows API函数中用到的函数和类型的 结构声明以及全局常量的值。用户可以用VB本身带的外 接程序"API浏览器"来方便地使用Win32api.Txt,如下 所示:
点击菜单文件项的"加载文本文件…"从VB目 录下的WINAPI目录中选择"WIN32API.TXT",就可以 查看WINDOWS 95系统的API函数的声明、常数定义和 数据类型了。例如,我们打算查看函数InverRect() 的声明。首先,点击"搜索"按钮,输入字符串 "InverRect"。在"可选项"栏中,兰色的亮度条将移 动到"InverRect"项上。再点按"添加"按钮,在"选 定项"中就出现"InverRect"在Visual Basic中的 声明了。接下来自然是点按"复制"按钮,然后将窗 口切换到Visual Basic开发环境中,在需要声明API 函数的地方Ctrl+V(粘贴)即可?
上面所讲的声明方法虽然简单,但只有使用WIN DOWS本身的API函数才能这样。对于第三方提供的动 态链接库(DLL)您只有用键盘老老实实地敲了。
第二节:牛刀小试
现在读者一定很想自己亲自试一下,下面举两个 实际应用的例子让大家体会一下API的妙用吧!
1.使一个窗体始终保持在屏幕的最上面
我们知道VB本身自带的函数是难以完成此功能 的,我们可以通过调用Windows的API函数: SetWindowPos达到我们的要求。操作步骤如下:
(1)启动VB5建立一个新工程,在该工程中添加一 个模块(Moudel),在该模块中用上述的"API例览器" 添加如下的该API函数的函数声明和常量声明部分:
'API函数声明
Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
'常量声明
Global Const SWP_HIDEWINDOW = &H80
Global Const SWP_NOACTIVATE = &H10
Global Const SWP_NOCOPYBITS = &H100
Global Const SWP_NOMOVE = &H2
Global Const SWP_NOOWNERZORDER = &H200
Global Const SWP_NOREDRAW = &H8
Global Const SWP_NOREPOSITION = SWP_NOOWNERZORDER
Global Const SWP_NOSIZE = &H1
Global Const SWP_NOZORDER = &H4
Global Const SWP_SHOWWINDOW = &H40
Global Const HWND_BOTTOM = 1
Global Const HWND_BROADCAST = &HFFFF&
Global Const HWND_DESKTOP = 0
Global Const HWND_NOTOPMOST = -2
Global Const HWND_TOPMOST = -1
Global Const HWND_TOP = 0
Global Const Flags=SWP_NOMOVE Or SWP_NOSIZE
这里以"SWP_"开头的常量是表示窗体所具有的 风格,这些常量可以通过VB中的"OR"操作符组合在 一起。而以"HWND_"开头的常量表示窗体在桌面上的 位置。从这些常量的英文单词的意义上读者应该很容 易理解他们所具有的风格了。所以笔者就不一一去说 明了。至于为什么要添加这些常量而不是别的这就要 您去查看Windows SDK关于该函数的帮助文档了。当 然这对于初学者来说有一定的难度,但不要畏惧,只 要您仔细看帮助就会慢慢搞懂的。因为这些API函数 是为C和C++的编程人员编写的,所以如果您懂一点 C++的话会很容易理解的。
(2)现在只要在您想要此功能的地方调用该函数 就可以了,调用的方法如:
Dim Success as Long
SuccesS=SetwindowPos(me.HWnd. HWND_TOPMOST,0,0,0,0,FLAGS)
若Success返回的值不等于零则表示调用成功。
比如在某个窗体的Load事件中加入上述的两行代 码,就可以达到使该窗体始终位于屏幕最上面的目的。
细心的读者可能已经发现上面的例子中的模块声 明中声明了好几个常量,可为什么只用到三个呢?现 在您可以试着改变一下API函数"SetWindowPos"中 的第二个参数或常量FLAGS中的项,看看您的窗体会 出现什么样的效果?


2.VB5中如何屏蔽掉win95中的CTRL_ALT_DEL, CTRL_ESC, ALT_TAB三组热键通过调用API函数"SystemParametersInfo"来实 现。
首先创建一新工程;在此工程中添加一个窗体和 一个模块;在窗体上拖放两个按钮分别命名为 "cmdDisable","cmdEnable";Copy如下代码入模块中:
Public Declare Function SystemParametersInfo Lib "user32" Ahias "SystemParametersInfoA" (ByVal uAction As Long,ByVal uParam As Long, lpvParam As Any,ByVal fuWinIni As Long)AS Long
Public Const SPI_SCREENSAVERRUNNING=97
在窗体的代码编辑区Copy如下代码:
'使三组热键失效
Private Sub cmdDisable_click()
SystemParametersInfo
SPI_SCREENSAVERRUNNING,True,byVal 1&,0
End Sub

Private Sub Form_Unload(Cancel As Integer)
'程序退出前是热键有效
CndEnable_Click
End Sub
若将此功能和屏幕保护程序结合到一起,那您的屏幕 保护程序一定增色许多。
API函数的简单调用例子就是这么容易,相信现在您 对API的调用已不再感到神秘了,接下来我们就看看一个 比较复杂的应用。
第三节:高手进阶
上面的关于API的调用的例子只是为了带您去Win dows API世界中去探索一下。相信您已探索到了一点眉 目并想去实现一些更"好玩"的东西了。好!下面就向您 介绍一个很"好玩"同时又会使您的程序看起来更专业化 的一个API调用。
相信您的机器上一定装有"金山词霸",试着启动它 您发现了什么?启动画面过后它"不见了"。把鼠标移到 桌面的右下角,原来它以图标的形式"藏在" Windows 的托盘中。用鼠标右击它还会弹出一个菜单功能项供您 选择。现在您一定想把自己的程序也放到托盘,这样您的 程序多具有专业水准?

来源:www.upschool.com.cn
作者:吴龙杰
关键字:VB,API,API编程
发表日期:2007-2-17 0:30:47

网页显示有限 阅读全文请下载本文完整版WORD文档

上一篇:API函数快速入门--怎样在VB中声明和使用API函数   下一篇:


共2页 9 7 [1] [28 :>

本文的相类似文章
  • VB的API编程精粹(二)
  • API函数快速入门--怎样在VB中声明和使用API函数
  • VB的编译优化
  • VB中用Multimedia MCI控件开发多媒体应用
  • 认识VB的扩展名
  • VB编写键盘记录器
  • 在VB中操纵OLE服务器应用程序
  • 推荐几种vb中创建超长时间计时器
  • 用VB编写键盘拦截程序
  • 猎取当前QQ聊天内容-VB版
  • 网友评论 查看本文全部评论
    笔 名: *
    评 论:
    最多500字。当前字数:0
    联系方式:
    验证码:
    在学习中进步 在进步中成长 教程中国相随您的成长之路
    华腾联合科技股份有限公司版权所有
    广告联系:Rosibo@163.com