当前位置: 网学 > 编程文档 > VB > 正文

VB5.0与Windows API 间的呼叫技巧

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/16
下载{$ArticleTitle}原创论文样式
ng1-1) ''这便是ProductId的值
*****************************************************************************
在这里有另外一件事要特别说明,范例三程式中有一行leng1=Len(strBuffer)+1,
这行可省不得,很奇怪吧,为什麽明明是一个传回值,却一定要设定给它一个strBuff
的大小呢?这是因为许多WIN API 不会聪明到找strBuff的Null Char在哪里,所以需要
程式传进去,而後它再依这个栏位传回填入strBuff 的数目。

五、Array参数的传递

我们知道Win API 的阵列传递是传阵列的起始位址,所以了,在VB中唯一要注意的
是起始位置的写法。以另一个取得Window目录所在路径的API为
例:
-----------------------------------------------------------------------------
UINT GetWindowsDirectory(
LPTSTR lpBuffer, // address of buffer for Windows directory
UINT uSize // size of directory buffer
); // 若成功,则传回目录的字元数
VB的宣告(API检视员)
Declare Function GetWindowsDirectory Lib "kernel32" Alias _
"GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) _
As Long
我们将之更改为
Declare Function GetWindowsDirectory Lib "kernel32" Alias _
"GetWindowsDirectoryA" ( lpBuffer As Byte, ByVal nSize As Long) As Long

-----------------------------------------------------------------------------
范例四
*****************************************************************************
Dim n as Long
Dim Buff() as Byte
Dim StrA as String

Buff = space(256)
n=GetWindowsDirectory(Buff(0), 256)
Buff = Leftb(Buff, n)
StrA = StrConv(Buff, vbUniCode) ''StrA便是Windows所在目录
*****************************************************************************

在范例四中,GetWindowsDirectory()传入的第一个参数Buff(0)便是这阵列的起始
Byte ,因VB 宣告成lpBuffer As Byte,故传过去的是ByRef Buff(0)的位址,当然了
,你也可以呼叫成n=GetWindowsDirectory(Buff(1), 256),只是传回值是填在Buff(1)
to Buff(n),而Buff(0)则仍为起始的Space Character(32),因为该API传回值是字
元个数,再加上存於Buff中的是Byte Array故,使用Leftb()去除多出的byte,再用
StrConv将Byte Array转成Unicode的字串。比照范例二的作法,我们也可以将Byte
Array 改成以String的方式来做,二者可做一比较,谁比较好或比较顺畅,那见人见智
,不过可以肯定的是,如果传的值是Binary的值,那麽使用Byte Array来做才对,因用
String来传的话,会经过转换成UniCode的步骤,这中间会发生什麽事,没人知道。

六、CallBack Function的作法

VB的使用者通常对於这个名词有著多多少少的疑惑,或称之为"哭爸"Function,而
VB5使用手册使用Window Procedure来说明,除非对Window 系统有一些了解,否则可能
令人更不知所云;我使用另一个例子来说明,那便是KeyBoard Hook。什麽是KeyBoard
Hook 呢,简言之便是按键盘时,便会自动执行某一段Function的功能,就好比Dos时代
的拦截中断向量一般。让我们先看一下设定Hook的宣告吧。

-----------------------------------------------------------------------------
HHOOK SetWindowsHookEx(
int idHook, // type of hook to install
HOOKPROC hkprc, // address of hook procedure
HINSTANCE hMod, // handle of application instance
DWORD dwThreadID // identity of thread to install hook for
);

Declare Function SetWindowsHookEx Lib "user32" Alias SetWindowsHookExA" _
(ByVal idHook As Long, _
ByVal lpfn As Long, _
ByV
  • 上一篇资讯: 用VB编写登录程序
  • 下一篇资讯: VB中实现MD5加密
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号