VBAPI教程Word文档格式.docx

上传人:b****6 文档编号:21619039 上传时间:2023-01-31 格式:DOCX 页数:33 大小:44.13KB
下载 相关 举报
VBAPI教程Word文档格式.docx_第1页
第1页 / 共33页
VBAPI教程Word文档格式.docx_第2页
第2页 / 共33页
VBAPI教程Word文档格式.docx_第3页
第3页 / 共33页
VBAPI教程Word文档格式.docx_第4页
第4页 / 共33页
VBAPI教程Word文档格式.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

VBAPI教程Word文档格式.docx

《VBAPI教程Word文档格式.docx》由会员分享,可在线阅读,更多相关《VBAPI教程Word文档格式.docx(33页珍藏版)》请在冰豆网上搜索。

VBAPI教程Word文档格式.docx

API浏览器的位置位于[开始菜单-程序-MicrosoftVisualBasic6.0中文版-MicrosoftVisualBasic6.0中文版工具-API文本浏览器]。

打开API浏览器,在最上面的一个文本框中输入Sleep,这时下面列表框中就会自动显示相应的API函数,然后点右边添加按钮即可,接着点击复制按钮,这时你就可以用Ctrl+V把声明的API添加到VB代码窗口中了。

  这里我要说一下,有些新手可能还弄不明白。

API的声明范围一般有两种模式,一种是Private(私有的),一种是Public(公用的)。

一般Private是声明在类模块或窗体类中,Public声明在模块中。

你在添加API的时候,添加按钮下面就有API的声明范围,可以根据自己的需要进行添加。

这里我们一般选择私有的(Private)就可以了。

  经过上面,我们知道如何添加API,接着我们分析一下API声明,这是你了解API必备的。

首先看第一个单词Private,很显然,我上面刚刚讲过,这是申明一个私有的API变量。

再看第二个Declare,这个单词帮我们告诉VB是在申明API函数,一般申明外在的API函数时都必须带上这个单词。

第三个Sub,别告诉我你不知道什么意思?

这就是我叫你先学习VB中过程函数的意思,这个说白了就是没有反回值,一般如果不是Sub而是Function都带有反回值的。

第四个Lib,这个是告诉VB我们要声明哪一个DLL中的API函数,也就是告诉VB我们要申明第五个单词kernel32.dLL中的API,一般写DLL名称时都要用双引号括起来,如"

user32"

、"

shell32.dll"

等,至于后面的.dll这个可以带可不带。

再来看第六个Alias,这个也是需要同后面一个一起用的,我们应该把第六个和第七个连起来一起看Alias"

,这个意思表示将被调用的过程在DLL中还有另外的名称,这个是可选的。

最后括号里面的,也就是和过程函数一样,你传入相应的值就可以了。

  上面我们分析完API函数声明以后,接着我们就要自己动手写代码了。

先把这个API复制到Form1代码窗口中,然后写如下代码:

PrivateDeclareSubSleepLib"

PrivateSubForm_Load()

Sleep2000

EndSub

  解释一下,也就是在窗体启动时使用SleepAPI进行延时2秒,后面的参数dwMilliseconds是表示你要延时的秒数,基本上和设置Timer中的秒数一样。

你再看一下Sleep 2000的使用方式,是不是和使用VB过程函数一样呢?

好了,我们的第一个VBAPI程序写完了,可以看到使用API并不是一件很难的事。

三、如何才能提升你对API的学习兴趣?

  API,我常把它看做成过程函数,不过每人都有每人的见解和理解方式,自己的理解方式只要可以帮助自己更好的学习和掌握API,也没必要一定要学习他人的。

  1,自己做MsgBox

  了解API参数的使用方法是很重要的,这里我们不用VB的MsgBox,直接使用API弹出MsgBox消息框。

首先,打开API浏览器,选择MessageBox,大家可以用这个API和VB内置的MsgBox比较一下,其实MsgBox也就是MessageBox的缩写,只不过一个是API,一个是VB内置的,但两者都是通过API进行工作的。

好了,选择私有声明方式,粘贴到VB代码编辑窗口中,然后新建一个CommandButton,写入以下代码:

PrivateDeclareFunctionMessageBoxLib"

MessageBoxA"

(ByValhwndAsLong,ByVallpTextAsString,ByVallpCaptionAsString,

ByValwTypeAsLong)AsLong

PrivateSubCommand1_Click()

MessageBoxMe.hwnd,"

这里是内容"

"

标题"

0

  先让我们来分析一下,首先看第一个参数ByvalhWndAsLong,很显然这是一个长整形变量,所以我们这里需要传递的是数字,你可能会发现我们传递的并不是数字啊,而是Me.hwnd?

很奇怪是吗?

如果你真的有此疑问说明你是真心想要学习好API的,现在就让我们来看看Me.hwnd到底是什么东西?

以下摘自VB帮助文档:

  hWnd属性:

返回窗体或控件的句柄。

  句柄:

是由操作环境定义的一个唯一的整数值,它被程序用来标识或者切换到对象,如窗体或控件等。

  现在估计你差不多就已经明白了,我们调用的hwnd其实是一个句柄整数值,你可以用MsgboxMe.hwnd 看一下就知道了。

至于Me这是一个关键字,代表当前Form窗体对象。

如:

Me.Caption="

、Me.BackColor=vbRed等。

  接上面的,首先我们传入了Me.hwnd,表示是当前窗口调用MessageBox,这里告诉大家一个技巧,也就是以后凡是看到ByvalhwndAsLong,一般都是需要传入句柄的,至于传入哪个对象句柄,那就要看你是怎么实现的了。

  ByVallpTextAsString,这个是字符串变量,标识着叫我们需要传入字符串进去,可以看里面的变量字符lpText,属于文本的意思,也就是说是用来显示MsgBox中的消息文本的。

  ByVallpCaptionAsString,也是字符串变量,还是传入字符串进去。

在看里面的变量字符lpCaption,其实就是显示MsgBox标题的。

  ByValwTypeAsLong,这是一个整形变量,需要传递整形数字,还是看里面的变量字符wType,标识着显示MsgBox类型,这里可以像VB的MsgBox一样使用,如这里可以传入:

vbYesNo,vbOkCancel等,如果忽略那就传入0即可。

  好了,按F5启动程序,点击Command1,接着就会弹出一个消息框,这里我们制作以及分析MsgBox已经完成了。

希望你能在这段学习到一些知识。

  2,来点实用的吧

  就拿隐藏Windows任务管理器来说吧,这里只能隐藏任务管理器中的窗口,不能隐藏进程。

(问:

有没有隐藏进程的?

答:

你想干什么?

),当程序运行后你无法从任务管理器的窗口中关闭程序,只能从进程中进行终止。

好了,还是老规矩,打开API浏览器,输入GetWindow和ShowWindow两个API,声明范围还是私有的,复制粘贴到Form代码窗口中,嗯,好了?

别急,还是API浏览器,选择Combox中的常数,输入GW_OWNER和SW_HIDE这两个API常数,然后粘贴到代码窗口中,问我这两个是干什么的?

那就接着往下看吧。

写入以下代码:

PrivateDeclareFunctionGetWindowLib"

(ByValhwndAsLong,

ByValwCmdAsLong)AsLong

PrivateDeclareFunctionShowWindowLib"

ByValnCmdShowAsLong)AsLong

PrivateConstGW_OWNER=4

PrivateConstSW_HIDE=0

DimlphWndAsLong

lphWnd=GetWindow(Me.hwnd,GW_OWNER)

ShowWindowlphWnd,SW_HIDE

  又到了分析的时候了,这对刚入门的新手可谓是最激动的时候了。

好了,还是老子,看看两个API的表面意思和传递值变量。

  先看GetWindow,表面意思:

获取窗口。

传递值变量:

hWnd整形句柄,wCmd整形命令值。

  再看ShowWindow,表面意思:

显示窗口。

hWnd整形句柄,nCmdShow整形命令值。

  然后是使用代码,先看lphWnd=GetWindow(Me.hwnd,GW_OWNER)这句,这句意思是获取当前窗口的所有者窗口句柄,可以看到GetWindow是Function过程函数,执行以后会返回相应的窗口句柄值,这个值为Long整形(同句柄)。

接着调用ShowWindowlphWnd,SW_HIDE,这句意思是显示lphwnd这个句柄的窗口,关键一句是最后的SW_HIDE,这是API函数的常量。

通过设置常量能让系统知道API到底应该怎么执行显示窗口,是显示?

还是隐藏?

Hide当然是隐藏的意思。

好了,编译成Exe,运行后打开任务管理器,查看程序窗口,还有吗?

  我又要说一下了,有些人可能不懂为什么要用GW_OWNER这些常量,这些到底有什么用?

还有就是我怎么知道哪些API对应哪些的常量?

其实这些常量你只要稍微注意一下就知道它们是怎么回事了,如在GetWindow中我使用GW_OWNER,在ShowWindow中我使用SW_HIDE这些常量都有一个共同的特点,就是他们都是以API的单词第一个字母为标准。

如GetWindow相对应的常量就是Get(G)Window(W)=GW,ShowWindow相对应的常就是Show(S)Window(W)=SW,这些常量可以自己在VB的API浏览器中找找看。

3,继续往下学吧。

上面两个我们讲到了一般API的使用方法,和一些API常量的使用方法,接着我们来看看API类型的使用方法,在了解这一小节前请先搞懂VB中的自定义类型(Type)这章,否则你可能会稀里糊涂的,到时别怪我没提醒你哦!

这次让我们来获取一下鼠标指针的位置。

这里教大家一个技巧,当你想用API去实现某一特定的功能时,却又不知道该用哪个API,这时你可以就表面的意思到API浏览器找找,有70%以上的机率可以找到哦!

现在就拿这个API开刀,那我们应该如何找?

别着急,往下看:

如我们现在要获取鼠标指针位置,可以这样翻译一下:

Get(获取)Cursor(指针)Pos(位置),组合起来:

GetCursorPos,呵呵,一条API就这样出来了,到API浏览器输入这个组合单词,呵,有吧?

见以下:

PrivateDeclareFunctionGetCursorPosLib"

GetCursorPos"

(lpPointAsPOINTAPI)AsLong

好了好了,高兴一下就算了,现在让我们分析一下这个API,看其它的没啥不同的,其中只有一个参数,就是最后一个变量有些不懂?

在VB中好像没有见过这个变量?

不明白么?

那就再继续往下看。

lpPointAsPOINTAPI,POINTAPI?

很显然,在VB中并没有此类型,一般都是String、Integer、Long、Byte等变量类型,那么这个也就理所当然的是自定义类型(问:

什么是自定义类型?

不知道,自已不会看书啊)。

既然是自定义类型,那么我们如何才能知道它是如何定义的呢?

这里也就不用你操心啦,还是API浏览器,在最上面的Combox中选择类型,这时下面List中也就自然的把API的相关类型显示出来了,现在我们开始在Text文本框中输入我们需要的自定义类型,POINTAPI,点击添加,出来了吧?

如下:

PrivateTypePOINTAPI

xAsLong

yAsLong

EndType

好了,现在开始写代码,添加一个Timer控件,设置属性见以下:

Interval=100

Enabled=True

双击Timer控件,转到代码环境中写入以下代码:

PrivateSubTimer1_Timer()

DimlpPointAsPOINTAPI

GetCursorPoslpPoint

Me.Caption="

X="

&

lpPoint.x&

"

Y="

lpPoint.y

好了,分析开始,紧张不?

别紧张,没啥值得紧张的!

DimlpPointAsPOINTAPI,申明一个POINTAPI类型变量,我们学过自定义类型的朋友都知道,一般使用自定义类型时都需要先申明一个相关的类型变量方可使用。

GetCursorPoslpPoint,这一步我不说你都知道,调用API呗。

通过这个API获取鼠标指针的相关信息。

这里我们使用了自己声明的lpPoint变量,那为啥要使用这个变量呢?

这里我们回过头来就前两节我们所分析的那样进行分析,可以看到GetCursorPos所需要传递的值,如果是Long,我们就传入整形数字,如果是String,我们就传入字符串,这里是POINTAPI,所以理所当然是要传入POINTAPI类型,但是!

VB中的自定义类型不可以直接使用,所以我们需要先声明一个相同类型的变量。

不知道说了这么多你懂了没?

lpPoint.y,最后一句,也就是用来显示当前鼠标的坐标值的,我们通过声明的lpPoint变量来获取相应的鼠标坐标值,如果你不懂,那就请你先把VB自定义类型这章学完再说。

这里关于API的一些使用方法及范例就先介绍到这里,如果你还有耐心往下看下去的话,那我们就接着往下聊!

四、如何慢慢提升自己的API功力?

何为API功力?

其实没必要搞那么清楚,首先需要搞明白的就是,你应该知道在什么环境下使用什么API,实现哪些功能应该使用哪些API!

这才是我们需要的。

提升自己的API功力?

如何提升?

怎么个提升法?

这一点有待讨论,不过目前咱们需要做的是多多接触一下API,这样长久以后你就自然会对API产生一种亲切感,慢慢的你会觉得自己用API写程序是多么正常的一件事情。

呵呵这个亲切感我喜欢!

1,试着自己从小程序开始写起。

写小程序?

对!

在你写小程序时应该拣你最感兴趣的程序写,否则有可能你写到一半以后会觉得自己这个程序写得毫无价值,简直是在浪费时间,最后到头来还是功亏一篑。

这里我拿什么当题材呢?

我在这里也想了很久,最后还是决定选择一个注销Windows程序来做题材(其实这是我当初学API最想实现的功能)。

注销Windows也就是退出Windows(重启,关机等都一样,不都是退出的意思吗?

),根据表面意思在API浏览器中输入Exit(退出)Windows,看看有没有这个API?

这里提醒一下,你在查找这个API的时候还会看到ExitWindowsEX这个API,其实这两个API实现的功能一样,前者是用在16位操作系统上,只不过在Win32位操作系统上一般都使用ExitWindowsEX。

所以这里就使用后者。

API见以下:

PrivateDeclareFunctionExitWindowsExLib"

ExitWindowsEx"

(ByValuFlagsAsLong,ByValdwReservedAsLong)AsLong

看看里面的两个参数,ByValuFlagsAsLong?

这里我们需要传入一个整形数字,可是应该传入什么数字呢?

这里说下,API中的参数可以传入不同的值,不同的值从而导致产生不同的结果。

分析API中参数应该传递哪些值其实是有技巧的,以后大家只要是看到参数字符中包函Flags字符的话那就说明该参数可以被传入一个或多个标志,并且大部分都是传入API常数(什么是API常数就不用我说了吧)。

说白话点,就是我们可以传入多个API常量,并且可以在API浏览器中找到,当然,不一定所有的API常数都可以在API浏览器中找到,不过大部分都可以。

在API浏览器查API常量时我前面就教过大家技巧,现在该是我们实践的时候了,分析如下:

Exit:

头一个大写字符E

Windows:

头一个大写字符W

Ex:

组合:

EWE_

好了,现在在API浏览器的中常数中找找,咦?

发现好像没有以EWE开头的常数?

只发现以EWX开头的?

现在先别着急,咱们回过头来再分析下,咱们是失败在最后一步Ex上,这里我不得不否决我前面教过大家的技巧,但是又不能完全否决,出现这种情况时就需要大家灵活运用API常数的分析法,可以看到EWX最后一个X是以Ex的X作结尾的,以这种方法做API常数开头的不止这一个,所以这里我特意留了一个陷阱,希望给大家带来一些经验将来能够灵活运用。

现在我把关机uFlags所能用到的相关常数发上来,如下:

PrivateConstEWX_FORCE=4

PrivateConstEWX_LOGOFF=0

PrivateConstEWX_REBOOT=2

PrivateConstEWX_SHUTDOWN=1

怎么样?

看得懂吧?

英语稍微好一点基本上没问题。

不过这里我还是要解释一番,照顾新手嘛!

EWX_FORCE前面的EWX_我就不说了,关键是看_符号后面的,Force单词翻译:

强制,强迫。

人工在翻译一下(我英文不好,翻译错了请别见怪,呵呵^_^),意思是说:

强制执行ExitWindowsExAPI关机函数。

不知道这样解释你能不能明白。

那到底这个常数有什么用呢?

这里我们先回忆一下以前关机的时候,当Windows无法关闭某些窗口的时候就停止继续关机了,最后还得把无法关闭的窗口手动关闭方可,现在,如果我们使用这个常数进行关机,那Windows不管你窗口能不能关闭,直接强制关闭。

希望你懂了。

EWX_LOGOFF这个嘛,貌似组合单词,不可直接翻译,那样就不是那个意思了。

LogoutOff,是这样写吗?

注销的意思。

EWX_REBOOT不浪费时间了,直接说明意思:

重新启动。

EWX_SHUTDOWN关机。

至于第二个ByValdwReservedAsLong,为保留整形,一般为0即可。

至于为什么为0,大家可以到网上下载一些专门讲解API函数的电子书看看,里面有大部分API函数的详细讲解。

或者下载VS.MSDN看看,在MSDN中说Windows2000/95/98/Me中此参数忽略,XP中是指定关机消息说明。

最后看看这个API为Function声明,说明该函数有返回值,返回值为Long,MSDN中说:

如果执行成功,则返回非零,否则为零。

现在上面已经把这个关机API和相关参数常量都给你分析透了,你可别告诉我你还不知道怎么写?

好了,这里我们做一个定时注销程序,呵呵,虽然很简单,不过很多时候用得上哦!

在Form窗口上添加Timer控件,Interval设置为1000,Enabled设置为True。

好了,代码如下:

PrivateSubTimer1_Timer()

StaticiAsInteger

i=i+1

Me.Caption=i'

这一步纯粹是想看看当前已经执行到几秒了?

可不要

Ifi=10Then'

秒数判断,可以根据自己的需要进行运算

ExitWindowsExEWX_LOGOFF,0

EndIf

EndSub

其实我都有点不想分析了,不过为了照顾大众,不得不说下,StaticiAsInteger静态变量(问:

啥叫静态变量?

我晕!

),i=i+1是每执行Timer一次i就加1,Timer的interval设置为1000,1000为一秒,2000为二秒。

后面一个Ifi=10Then是判断当i=10以后,也就是10秒,就执行注销,这个时候你可别忘了保存好你的其它没有保存的文件哦,如果没保存资料丢失的话偶不承担任何法律责任的。

其实这里我们可以自己做一个,如可以写成这样:

ExitWindowsExEWX_LOGOFFOrEWX_FORCE,0,其中用了Or运算,整体的意思是强制Windows注销。

这样理解就够了,只要能让你明白。

现在我又要说一下了,不说不行的!

就是在API中使用Or运算,关于Or运算符VB书中都有详细解释的,别告诉我你没看?

没看马上去看!

上面EWX_LOGOFFOrEWX_FORCE的使用是把注销和强制进行Or位运算,对两个数值执行按位析取,这里涉及到二进制运算,说多了你可能不明白(如果你还是想追根到底的想知道到底是怎么一回事的话,我也没办法,给个网址你慢慢看

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1